aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8.3/libstdc++-v3/doc/xml
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2016-02-24 13:48:45 -0800
committerDan Albert <danalbert@google.com>2016-02-24 13:51:18 -0800
commitb9de1157289455b0ca26daff519d4a0ddcd1fa13 (patch)
tree4c56cc0a34b91f17033a40a455f26652304f7b8d /gcc-4.8.3/libstdc++-v3/doc/xml
parent098157a754787181cfa10e71325832448ddcea98 (diff)
downloadtoolchain_gcc-b9de1157289455b0ca26daff519d4a0ddcd1fa13.tar.gz
toolchain_gcc-b9de1157289455b0ca26daff519d4a0ddcd1fa13.tar.bz2
toolchain_gcc-b9de1157289455b0ca26daff519d4a0ddcd1fa13.zip
Update 4.8.1 to 4.8.3.
My previous drop was the wrong version. The platform mingw is currently using 4.8.3, not 4.8.1 (not sure how I got that wrong). From ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.bz2. Bug: http://b/26523949 Change-Id: Id85f1bdcbbaf78c7d0b5a69e74c798a08f341c35
Diffstat (limited to 'gcc-4.8.3/libstdc++-v3/doc/xml')
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/api.xml112
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/authors.xml120
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/book.txml30
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/chapter.txml47
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/class.txml161
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/faq.xml1246
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/gnu/fdl-1.3.xml562
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/gnu/gpl-3.0.xml834
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.dot16
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.pdfbin0 -> 50629 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.pngbin0 -> 20653 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_balls_and_bins.pngbin0 -> 10139 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pdfbin0 -> 81428 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pngbin0 -> 32915 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.svg442
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pdfbin0 -> 81328 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pngbin0 -> 33264 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.svg442
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pdfbin0 -> 90172 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pngbin0 -> 66803 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.svg593
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pdfbin0 -> 90040 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pngbin0 -> 67129 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.svg593
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pdfbin0 -> 90196 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pngbin0 -> 67625 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.svg594
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pdfbin0 -> 77608 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pngbin0 -> 64083 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.svg402
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pdfbin0 -> 9605 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pngbin0 -> 85192 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.svg256
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.pngbin0 -> 31858 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.pngbin0 -> 15660 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.pngbin0 -> 16350 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.pngbin0 -> 18206 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.pngbin0 -> 5612 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pdfbin0 -> 7520 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pngbin0 -> 18245 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.svg76
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pdfbin0 -> 76134 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pngbin0 -> 46447 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.svg365
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pdfbin0 -> 76225 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pngbin0 -> 47232 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.svg365
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pdfbin0 -> 76238 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pngbin0 -> 49697 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.svg365
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pdfbin0 -> 77175 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pngbin0 -> 48012 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.svg412
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.pngbin0 -> 25302 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.pngbin0 -> 12962 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.pngbin0 -> 8918 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.pngbin0 -> 19773 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.pdfbin0 -> 83353 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.pngbin0 -> 57070 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.svg479
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pdfbin0 -> 89031 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pngbin0 -> 53858 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.svg552
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.pngbin0 -> 25834 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.pngbin0 -> 25522 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.pngbin0 -> 24542 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.pngbin0 -> 25884 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pdfbin0 -> 6903 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pngbin0 -> 14178 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.svg40
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_list_update.pngbin0 -> 20987 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pdfbin0 -> 67642 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pngbin0 -> 45704 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.svg235
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pdfbin0 -> 70583 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pngbin0 -> 37835 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.svg277
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pdfbin0 -> 67623 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pngbin0 -> 44996 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.svg235
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pdfbin0 -> 70942 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pngbin0 -> 37341 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.svg277
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pdfbin0 -> 67457 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pngbin0 -> 46498 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.svg235
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pdfbin0 -> 70759 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pngbin0 -> 37488 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.svg277
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pdfbin0 -> 67786 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pngbin0 -> 49055 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.svg240
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pdfbin0 -> 70776 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pngbin0 -> 41256 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.svg282
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pdfbin0 -> 67808 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pngbin0 -> 48026 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.svg249
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pdfbin0 -> 70972 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pngbin0 -> 40541 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.svg291
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pdfbin0 -> 67656 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pngbin0 -> 47330 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.svg235
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pdfbin0 -> 70738 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pngbin0 -> 38337 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.svg277
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_node_invariants.pngbin0 -> 16553 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pdfbin0 -> 68294 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pngbin0 -> 25795 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.svg251
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pdfbin0 -> 68500 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pngbin0 -> 26470 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.svg252
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pdfbin0 -> 82821 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pngbin0 -> 35873 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.svg475
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pdfbin0 -> 75989 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pngbin0 -> 34785 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.svg365
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pat_trie.pngbin0 -> 26182 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.pngbin0 -> 20307 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.pngbin0 -> 14206 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.pngbin0 -> 12876 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.pngbin0 -> 15660 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pdfbin0 -> 103791 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pngbin0 -> 44300 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.svg821
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pdfbin0 -> 103910 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pngbin0 -> 47243 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.svg821
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pdfbin0 -> 7842 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pngbin0 -> 29346 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.svg88
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pdfbin0 -> 103511 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pngbin0 -> 49521 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.svg817
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pdfbin0 -> 103701 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pngbin0 -> 45433 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.svg821
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pdfbin0 -> 103554 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pngbin0 -> 44676 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.svg821
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pdfbin0 -> 102962 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pngbin0 -> 44599 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.svg831
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pdfbin0 -> 103249 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pngbin0 -> 43555 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.svg821
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pdfbin0 -> 103894 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pngbin0 -> 44314 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.svg821
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.pngbin0 -> 25097 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_resize_policy_cd.pngbin0 -> 20806 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.pngbin0 -> 14432 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_simple_list.pngbin0 -> 4299 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.pdfbin0 -> 82717 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.pngbin0 -> 37647 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.svg501
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.pngbin0 -> 32276 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.pngbin0 -> 16553 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.pngbin0 -> 9236 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pdfbin0 -> 81007 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pngbin0 -> 36565 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.svg442
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.pdfbin0 -> 82727 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.pngbin0 -> 38092 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.svg501
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.pdfbin0 -> 84206 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.pngbin0 -> 43323 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.svg538
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pdfbin0 -> 80772 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pngbin0 -> 35682 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.svg442
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pdfbin0 -> 68209 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pngbin0 -> 28044 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.svg251
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pdfbin0 -> 68484 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pngbin0 -> 28291 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.svg273
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pdfbin0 -> 82720 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pngbin0 -> 43242 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg501
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.pngbin0 -> 12126 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.pngbin0 -> 10789 bytes
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/abi.xml1194
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/algorithms.xml95
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/allocator.xml588
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_contributing.xml1800
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_free.xml174
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_porting.xml46
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/atomics.xml51
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/auto_ptr.xml130
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml1319
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml558
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/build_hacking.xml471
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/codecvt.xml676
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/concurrency.xml69
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml339
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/configure.xml387
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/containers.xml538
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/ctype.xml218
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/debug.xml362
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/debug_mode.xml886
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/diagnostics.xml126
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/documentation_hacking.xml1164
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/evolution.xml634
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/extensions.xml582
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/internals.xml542
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/intro.xml874
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/io.xml645
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/iterators.xml181
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/locale.xml615
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/localization.xml47
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/messages.xml568
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/mt_allocator.xml555
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/numerics.xml146
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/parallel_mode.xml876
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/policy_data_structures.xml5110
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml1452
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/prerequisites.xml133
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/profile_mode.xml1718
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/shared_ptr.xml484
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/spine.xml251
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxx1998.xml1160
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxx2011.xml2697
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml1794
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml297
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/strings.xml482
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/support.xml439
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/test.xml1021
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml9723
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/using.xml1598
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/using_exceptions.xml543
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/manual/utilities.xml119
-rw-r--r--gcc-4.8.3/libstdc++-v3/doc/xml/spine.xml75
236 files changed, 70220 insertions, 0 deletions
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/api.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/api.xml
new file mode 100644
index 000000000..7c02dffc8
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/api.xml
@@ -0,0 +1,112 @@
+<book xmlns="http://docbook.org/ns/docbook" version="5.0">
+
+<article xml:id="api" xreflabel="API">
+<?dbhtml filename="api.html"?>
+
+<title>The GNU C++ Library API Reference</title>
+
+<info>
+ <copyright>
+ <year>
+ 2008
+ </year>
+ <year>
+ 2010
+ </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>
+</info>
+
+<para>
+ 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
+ themselves. The resultant documentation is referred to as the API
+ documentation, and is useful for examining the signatures of public
+ member functions for the library classes, finding out what is in a
+ particular include file, looking at inheritance diagrams, etc.
+</para>
+
+<para>
+ The API documentation, rendered into HTML, can be viewed online:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html">for the 3.4 release
+ </link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/index.html">for the 4.1 release
+ </link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/index.html">for the 4.2 release
+ </link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/index.html">for the 4.3 release
+ </link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/index.html">for the 4.4 release
+ </link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.5/index.html">for the 4.5 release
+ </link>
+ </para>
+ </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.)
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ The rendered HTML, as above, is also available for download on the
+ gcc.org site in a directory located at
+ <literal>&lt;URL:ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/&gt;</literal>.
+ You will almost certainly need to use one of the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/mirrors.html">mirror sites</link> to download
+ the tarball. After unpacking, simply load libstdc++-html-*/index.html
+ into a browser.
+</para>
+
+<para>
+ In addition, a rendered set of man pages are available in the same
+ location specified above. Start with C++Intro(3).
+</para>
+
+</article>
+
+</book>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/authors.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/authors.xml
new file mode 100644
index 000000000..1f26f63fb
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/authors.xml
@@ -0,0 +1,120 @@
+<authorgroup xmlns="http://docbook.org/ns/docbook" 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>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/book.txml b/gcc-4.8.3/libstdc++-v3/doc/xml/book.txml
new file mode 100644
index 000000000..55b050271
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/book.txml
@@ -0,0 +1,30 @@
+<!-- Converted by db4-upgrade version 1.0 -->
+
+<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="api" xreflabel="Source Level Documentation">
+
+
+<info>
+ <copyright>
+ <year>2007</year>
+ <holder>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="www.fsf.org">FSF
+ </link>
+ </holder>
+ </copyright>
+ <legalnotice>
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="17_intro/license.html">License
+ </link>
+ </para>
+ </legalnotice>
+</info>
+
+<part><info><title/></info>
+
+ <chapter><info><title/></info>
+
+ <para/>
+ </chapter>
+</part>
+
+</book>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/chapter.txml b/gcc-4.8.3/libstdc++-v3/doc/xml/chapter.txml
new file mode 100644
index 000000000..b251c8460
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/chapter.txml
@@ -0,0 +1,47 @@
+<!-- Converted by db4-upgrade version 1.0 -->
+
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="manual.intro" xreflabel="Introduction">
+
+<info><title>Introduction</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<section xml:id="manual.intro.status" xreflabel="Status"><info><title>Status</title></info>
+
+ <para>
+ The GNU C++ ...
+ </para>
+</section>
+
+<section xml:id="manual.intro.setup" xreflabel="Setup"><info><title>Setup</title></info>
+
+ <para>
+ The GNU C++ ...
+ </para>
+ <section xml:id="manual.intro.setup.next1" xreflabel="Next1"><info><title>Next1</title></info>
+
+ <para>
+ The GNU C++ ...
+ </para>
+ </section>
+ <section xml:id="manual.intro.setup.next2" xreflabel="Next2"><info><title>Next2</title></info>
+
+ <para>
+ The GNU C++ ...
+ </para>
+ </section>
+</section>
+
+<section xml:id="manual.intro.using" xreflabel="Using"><info><title>Using</title></info>
+
+ <para>
+ The GNU C++ ...
+ </para>
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/class.txml b/gcc-4.8.3/libstdc++-v3/doc/xml/class.txml
new file mode 100644
index 000000000..be0929b70
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/class.txml
@@ -0,0 +1,161 @@
+<!-- Converted by db4-upgrade version 1.0 -->
+
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="manual.util.memory.allocator" xreflabel="allocator">
+<?dbhtml filename="allocator.html"?>
+
+<info><title>allocator</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>allocator</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+</para>
+
+<section xml:id="allocator.req" xreflabel="allocator.req"><info><title>Requirements</title></info>
+
+
+ <para>
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ </para>
+</section>
+
+<section xml:id="allocator.design_issues" xreflabel="allocator.design_issues"><info><title>Design Issues</title></info>
+
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+</section>
+
+<section xml:id="allocator.impl" xreflabel="allocator.impl"><info><title>Implementation</title></info>
+
+
+ <section><info><title>Interface Design</title></info>
+
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+ </section>
+
+ <section><info><title>Selecting Default Allocation Strategy</title></info>
+
+
+ <para>
+ </para>
+
+ <orderedlist>
+ <listitem>
+ </listitem>
+
+ <listitem>
+ </listitem>
+
+ <listitem>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section><info><title>Disabling Memory Caching</title></info>
+
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+ </section>
+</section>
+
+<section xml:id="allocator.using" xreflabel="allocator.using"><info><title>Using</title></info>
+
+
+ <para>
+ </para>
+</section>
+
+<section xml:id="allocator.custom" xreflabel="allocator.custom"><info><title>Custom Allocators</title></info>
+
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+</section>
+
+<bibliography xml:id="allocator.biblio" xreflabel="allocator.biblio">
+<info>
+ <title>
+ Bibliography
+ </title>
+</info>
+
+
+<!--
+ <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>
+-->
+
+
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/faq.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/faq.xml
new file mode 100644
index 000000000..6c25e7955
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/faq.xml
@@ -0,0 +1,1246 @@
+<book xmlns="http://docbook.org/ns/docbook" version="5.0">
+
+<article xml:id="faq" xreflabel="Frequently Asked Questions">
+<?dbhtml filename="faq.html"?>
+
+<info><title>Frequently Asked Questions</title>
+
+ <copyright>
+ <year>
+ 2008, 2010
+ </year>
+ <holder>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
+ </holder>
+ </copyright>
+</info>
+
+<!-- FAQ starts here -->
+<qandaset>
+
+<!-- General Information -->
+<qandadiv xml:id="faq.info" xreflabel="General Information">
+
+
+<qandaentry xml:id="faq.what">
+ <question xml:id="faq.what.q">
+ <para>
+ What is libstdc++?
+ </para>
+ </question>
+ <answer xml:id="faq.what.a">
+ <para>
+ 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/svn.html">web</link>.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.why">
+ <question xml:id="q-why">
+ <para>
+ Why should I use libstdc++?
+ </para>
+ </question>
+ <answer xml:id="a-why">
+ <para>
+ 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
+ (as the Draft Standard used to say) <quote>incomplet and
+ incorrekt</quote>, and many suffer from limitations of the compilers
+ that use them.
+ </para>
+ <para>
+ The GNU compiler collection
+ (<command>gcc</command>, <command>g++</command>, etc) is widely
+ considered to be one of the leading compilers in the world. Its
+ development is overseen by the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/">GCC team</link>. All of
+ the rapid development and near-legendary
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/buildstat.html">portability</link>
+ that are the hallmarks of an open-source project are being
+ applied to libstdc++.
+ </para>
+ <para>
+ That means that all of the Standard classes and functions will be
+ freely available and fully compliant. (Such as
+ <classname>string</classname>,
+ <classname>vector&lt;&gt;</classname>, iostreams, and algorithms.)
+ Programmers will no longer need to <quote>roll their own</quote>
+ nor be worried about platform-specific incompatibilities.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.who">
+ <question xml:id="q-who">
+ <para>
+ Who's in charge of it?
+ </para>
+ </question>
+ <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 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.
+ </para>
+ <para>
+ 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/libstdc++/">homepage</link>.
+ If you have questions, ideas, code, or are just curious, sign up!
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.when">
+ <question xml:id="q-when">
+ <para>
+ When is libstdc++ going to be finished?
+ </para>
+ </question>
+ <answer xml:id="a-when">
+ <para>
+ Nathan Myers gave the best of all possible answers, responding to
+ a Usenet article asking this question: <emphasis>Sooner, if you
+ help.</emphasis>
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.how">
+ <question xml:id="q-how">
+ <para>
+ How do I contribute to the effort?
+ </para>
+ </question>
+ <answer xml:id="a-how">
+ <para>
+ Here is <link linkend="appendix.contrib">a page devoted to
+ this topic</link>. Subscribing to the mailing list (see above, or
+ the homepage) is a very good idea if you have something to
+ contribute, or if you have spare time and want to
+ help. Contributions don't have to be in the form of source code;
+ 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!
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.whereis_old">
+ <question xml:id="q-whereis_old">
+ <para>
+ What happened to the older libg++? I need that!
+ </para>
+ </question>
+ <answer xml:id="a-whereis_old">
+ <para>
+ 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.
+ </para>
+ <para>
+ More information in the <link linkend="manual.appendix.porting.backwards">backwards compatibility documentation</link>
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.more_questions">
+ <question xml:id="q-more_questions">
+ <para>
+ What if I have more questions?
+ </para>
+ </question>
+ <answer xml:id="a-more_questions">
+ <para>
+ 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
+ information is available on the homepage (including how to browse
+ the list archives); to send a message to the list,
+ use <email>libstdc++@gcc.gnu.org</email>.
+ </para>
+
+ <para>
+ If you have a question that you think should be included
+ here, or if you have a question <emphasis>about</emphasis> a question/answer
+ here, please send email to the libstdc++ mailing list, as above.
+ </para>
+ </answer>
+</qandaentry>
+
+</qandadiv>
+
+<!-- License -->
+<qandadiv xml:id="faq.license" xreflabel="License QA">
+
+
+<qandaentry xml:id="faq.license.what">
+ <question xml:id="q-license.what">
+ <para>
+ What are the license terms for libstdc++?
+ </para>
+ </question>
+ <answer xml:id="a-license.what">
+ <para>
+ See <link linkend="manual.intro.status.license">our license description</link>
+ for these and related questions.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.license.any_program">
+ <question xml:id="q-license.any_program">
+ <para>
+ So any program which uses libstdc++ falls under the GPL?
+ </para>
+ </question>
+ <answer xml:id="a-license.any_program">
+ <para>
+ No. The special exception permits use of the library in
+ proprietary applications.
+ </para>
+ </answer>
+</qandaentry>
+
+
+<qandaentry xml:id="faq.license.lgpl">
+ <question xml:id="q-license.lgpl">
+ <para>
+ How is that different from the GNU {Lesser,Library} GPL?
+ </para>
+ </question>
+ <answer xml:id="a-license.lgpl">
+ <para>
+ 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
+ much of the library consists of inline functions and templates, which
+ 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.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.license.what_restrictions">
+ <question xml:id="q-license.what_restrictions">
+ <para>
+ I see. So, what restrictions are there on programs that use the library?
+ </para>
+ </question>
+ <answer xml:id="a-license.what_restrictions">
+ <para>
+ None. We encourage such programs to be released as free software,
+ but we won't punish you or sue you if you choose otherwise.
+ </para>
+ </answer>
+</qandaentry>
+
+</qandadiv>
+
+<!-- Installation -->
+<qandadiv xml:id="faq.installation" xreflabel="Installation">
+
+
+<qandaentry xml:id="faq.how_to_install">
+ <question xml:id="q-how_to_install">
+ <para>How do I install libstdc++?
+ </para>
+ </question>
+ <answer xml:id="a-how_to_install">
+ <para>
+ Often libstdc++ comes pre-installed as an integral part of many
+ 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.
+ </para>
+ <para>
+ To build and install from the GNU GCC sources, please consult the
+ <link linkend="manual.intro.setup">setup
+ documentation</link> for detailed
+ instructions. You may wish to browse those files ahead
+ of time to get a feel for what's required.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.how_to_get_sources">
+ <question xml:id="q-how_to_get_sources">
+ <para>How does one get current libstdc++ sources?
+ </para>
+ </question>
+ <answer xml:id="a-how_to_get_sources">
+ <para>
+ Libstdc++ sources for all official releases can be obtained as
+ part of the GCC sources, available from various sites and
+ mirrors. A full <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/mirrors.html">list of
+ download sites</link> is provided on the main GCC site.
+ </para>
+ <para>
+ Current libstdc++ sources can always be checked out of the main
+ GCC source repository using the appropriate version control
+ tool. At this time, that tool
+ is <application>Subversion</application>.
+ </para>
+ <para>
+ <application>Subversion</application>, or <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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://subversion.tigris.org"> Subversion
+ home page</link> has a better description.
+ </para>
+ <para>
+ The <quote>anonymous client checkout</quote> feature of SVN is
+ similar to anonymous FTP in that it allows anyone to retrieve
+ the latest libstdc++ sources.
+ </para>
+ <para>
+ For more information
+ see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/svn.html"><acronym>SVN</acronym>
+ details</link>.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.how_to_test">
+ <question xml:id="q-how_to_test">
+ <para>How do I know if it works?
+ </para>
+ </question>
+ <answer xml:id="a-how_to_test">
+ <para>
+ Libstdc++ comes with its own validation testsuite, which includes
+ conformance testing, regression testing, ABI testing, and
+ performance testing. Please consult the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/test.html">testing
+ documentation</link> for more details.
+ </para>
+ <para>
+ 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,
+ <emphasis>please</emphasis> write up your idea and send it to the list!
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.how_to_set_paths">
+ <question xml:id="q-how_to_set_paths">
+ <para>How do I insure that the dynamically linked library will be found?
+ </para>
+ </question>
+ <answer xml:id="a-how_to_set_paths">
+ <para>
+ Depending on your platform and library version, the error message might
+ be similar to one of the following:
+ </para>
+
+ <screen>
+ ./a.out: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
+
+ /usr/libexec/ld-elf.so.1: Shared object "libstdc++.so.6" not found
+ </screen>
+
+ <para>
+ This doesn't mean that the shared library isn't installed, only
+ that the dynamic linker can't find it. When a dynamically-linked
+ executable is run the linker finds and loads the required shared
+ libraries by searching a pre-configured list of directories. If
+ the directory where you've installed libstdc++ is not in this list
+ then the libraries won't be found. The simplest way to fix this is
+ to use the <literal>LD_LIBRARY_PATH</literal> environment variable,
+ which is a colon-separated list of directories in which the linker
+ will search for shared libraries:
+ </para>
+
+ <screen>
+ LD_LIBRARY_PATH=${prefix}/lib:$LD_LIBRARY_PATH
+ export LD_LIBRARY_PATH
+ </screen>
+
+ <para>
+ The exact environment variable to use will depend on your
+ platform, e.g. DYLD_LIBRARY_PATH for Darwin,
+ LD_LIBRARY_PATH_32/LD_LIBRARY_PATH_64 for Solaris 32-/64-bit
+ and SHLIB_PATH for HP-UX.
+ </para>
+ <para>
+ See the man pages for <command>ld</command>, <command>ldd</command>
+ and <command>ldconfig</command> for more information. The dynamic
+ linker has different names on different platforms but the man page
+ is usually called something such as <filename>ld.so/rtld/dld.so</filename>.
+ </para>
+ <para>
+ Using LD_LIBRARY_PATH is not always the best solution, <link linkend="manual.intro.using.linkage.dynamic">Finding Dynamic or Shared
+ Libraries</link> in the manual gives some alternatives.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.what_is_libsupcxx">
+ <question xml:id="q-what_is_libsupcxx">
+ <para>
+ What's libsupc++?
+ </para>
+ </question>
+ <answer xml:id="a-what_is_libsupcxx">
+ <para>
+ If the only functions from <filename>libstdc++.a</filename>
+ which you need are language support functions (those listed in
+ <link linkend="std.support">clause 18</link> of the
+ standard, e.g., <function>new</function> and
+ <function>delete</function>), then try linking against
+ <filename>libsupc++.a</filename>, which is a subset of
+ <filename>libstdc++.a</filename>. (Using <command>gcc</command>
+ instead of <command>g++</command> and explicitly linking in
+ <filename>libsupc++.a</filename> via <literal>-lsupc++</literal>
+ for the final link step will do it). This library contains only
+ those support routines, one per object file. But if you are
+ using anything from the rest of the library, such as IOStreams
+ or vectors, then you'll still need pieces from
+ <filename>libstdc++.a</filename>.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.size">
+ <question xml:id="q-size">
+ <para>
+ This library is HUGE!
+ </para>
+ </question>
+ <answer xml:id="a-size">
+ <para>
+ Usually the size of libraries on disk isn't noticeable. When a
+ link editor (or simply <quote>linker</quote>) pulls things from a
+ static archive library, only the necessary object files are copied
+ into your executable, not the entire library. Unfortunately, even
+ if you only need a single function or variable from an object file,
+ the entire object file is extracted. (There's nothing unique to C++
+ or libstdc++ about this; it's just common behavior, given here
+ for background reasons.)
+ </para>
+ <para>
+ Some of the object files which make up libstdc++.a are rather large.
+ If you create a statically-linked executable with
+ <literal>-static</literal>, those large object files are suddenly part
+ of your executable. Historically the best way around this was to
+ only place a very few functions (often only a single one) in each
+ source/object file; then extracting a single function is the same
+ as extracting a single .o file. For libstdc++ this is only
+ possible to a certain extent; the object files in question contain
+ template classes and template functions, pre-instantiated, and
+ splitting those up causes severe maintenance headaches.
+ </para>
+ <para>
+ On supported platforms, libstdc++ takes advantage of garbage
+ collection in the GNU linker to get a result similar to separating
+ each symbol into a separate source and object files. On these platforms,
+ GNU ld can place each function and variable into its own
+ section in a .o file. The GNU linker can then perform garbage
+ collection on unused sections; this reduces the situation to only
+ copying needed functions into the executable, as before, but all
+ happens automatically.
+ </para>
+ </answer>
+</qandaentry>
+
+</qandadiv>
+
+
+<!-- Platform-Specific Issues -->
+<qandadiv xml:id="faq.platform-specific" xreflabel="Platform-Specific Issues">
+
+
+<qandaentry xml:id="faq.other_compilers">
+ <question xml:id="q-other_compilers">
+ <para>
+ Can libstdc++ be used with non-GNU compilers?
+ </para>
+ </question>
+ <answer xml:id="a-other_compilers">
+ <para>
+ Perhaps.
+ </para>
+ <para>
+ Since the goal of ISO Standardization is for all C++
+ implementations to be able to share code, libstdc++ should be
+ usable under any ISO-compliant compiler, at least in theory.
+ </para>
+ <para>
+ However, the reality is that libstdc++ is targeted and optimized
+ for GCC/g++. This means that often libstdc++ uses specific,
+ non-standard features of g++ that are not present in older
+ versions of proprietary compilers. It may take as much as a year or two
+ after an official release of GCC that contains these features for
+ proprietary tools to support these constructs.
+ </para>
+ <para>
+ In the near past, specific released versions of libstdc++ have
+ been known to work with versions of the EDG C++ compiler, and
+ vendor-specific proprietary C++ compilers such as the Intel ICC
+ C++ compiler.
+ </para>
+
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.solaris_long_long">
+ <question xml:id="q-solaris_long_long">
+ <para>
+ No 'long long' type on Solaris?
+ </para>
+ </question>
+ <answer xml:id="a-solaris_long_long">
+ <para>
+ By default we try to support the C99 <type>long long</type> type.
+ This requires that certain functions from your C library be present.
+ </para>
+ <para>
+ Up through release 3.0.2 the platform-specific tests performed by
+ libstdc++ were too general, resulting in a conservative approach
+ to enabling the <type>long long</type> code paths. The most
+ commonly reported platform affected was Solaris.
+ </para>
+ <para>
+ This has been fixed for libstdc++ releases greater than 3.0.3.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.predefined">
+ <question xml:id="q-predefined">
+ <para>
+ <constant>_XOPEN_SOURCE</constant> and <constant>_GNU_SOURCE</constant> are always defined?
+ </para>
+ </question>
+ <answer xml:id="a-predefined">
+ <para>On Solaris, g++ (but not gcc) always defines the preprocessor
+ macro <constant>_XOPEN_SOURCE</constant>. On GNU/Linux, the same happens
+ with <constant>_GNU_SOURCE</constant>. (This is not an exhaustive list;
+ other macros and other platforms are also affected.)
+ </para>
+ <para>These macros are typically used in C library headers, guarding new
+ versions of functions from their older versions. The C++ standard
+ library includes the C standard library, but it requires the C90
+ version, which for backwards-compatibility reasons is often not the
+ default for many vendors.
+ </para>
+ <para>More to the point, the C++ standard requires behavior which is only
+ available on certain platforms after certain symbols are defined.
+ Usually the issue involves I/O-related typedefs. In order to
+ ensure correctness, the compiler simply predefines those symbols.
+ </para>
+ <para>Note that it's not enough to #define them only when the library is
+ being built (during installation). Since we don't have an 'export'
+ keyword, much of the library exists as headers, which means that
+ the symbols must also be defined as your programs are parsed and
+ compiled.
+ </para>
+ <para>To see which symbols are defined, look for CPLUSPLUS_CPP_SPEC in
+ the gcc config headers for your target (and try changing them to
+ see what happens when building complicated code). You can also run
+ <command>g++ -E -dM - &lt; /dev/null"</command> to display
+ a list of predefined macros for any particular installation.
+ </para>
+ <para>This has been discussed on the mailing lists
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink: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</link>.
+ </para>
+ <para>This method is something of a wart. We'd like to find a cleaner
+ solution, but nobody yet has contributed the time.
+ </para>
+
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.darwin_ctype">
+ <question xml:id="q-darwin_ctype">
+ <para>
+ Mac OS X <filename class="headerfile">ctype.h</filename> is broken! How can I fix it?
+ </para>
+ </question>
+ <answer xml:id="a-darwin_ctype">
+ <para>This is a long-standing bug in the OS X support. Fortunately,
+ the patch is quite simple, and well-known.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html"> Here's a
+ link to the solution</link>.
+ </para>
+
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.threads_i386">
+ <question xml:id="q-threads_i386">
+ <para>
+ Threading is broken on i386?
+ </para>
+ </question>
+ <answer xml:id="a-threads_i386">
+ <para>
+ </para>
+ <para>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
+ to target, for example, i386-linux, but actually used the programs
+ on an i686, then you would encounter no problems. Only when
+ actually running the code on a i386 will the problem appear.
+ </para>
+ <para>This is fixed in 3.2.2.
+ </para>
+
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.atomic_mips">
+ <question xml:id="q-atomic_mips">
+ <para>
+ MIPS atomic operations
+ </para>
+ </question>
+ <answer xml:id="a-atomic_mips">
+ <para>
+ 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
+ configure for mipsel-elf as a workaround.
+ </para>
+ <para>
+ The mips*-*-linux* port continues to use the MIPS II routines, and more
+ work in this area is expected.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.linux_glibc">
+ <question xml:id="q-linux_glibc">
+ <para>
+ Recent GNU/Linux glibc required?
+ </para>
+ </question>
+ <answer xml:id="a-linux_glibc">
+ <para>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.
+ libstdc++ 4.6.0 and later require glibc 2.3 or later for this
+ localization and formatting code.
+ </para>
+ <para>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.)
+ </para>
+
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.freebsd_wchar">
+ <question xml:id="q-freebsd_wchar">
+ <para>
+ Can't use wchar_t/wstring on FreeBSD
+ </para>
+ </question>
+ <answer xml:id="a-freebsd_wchar">
+ <para>
+ 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
+ disabled. In addition, the libstdc++ platform checks that
+ enabled <type>wchar_t</type> were quite strict, and not granular
+ enough to detect when the minimal support to
+ enable <type>wchar_t</type> and C++ library structures
+ like <classname>wstring</classname> were present. This impacted Solaris,
+ Darwin, and BSD variants, and is fixed in libstdc++ versions post 4.1.0.
+ </para>
+ <para>
+ </para>
+ </answer>
+</qandaentry>
+
+</qandadiv>
+
+
+<!-- Known Bugs -->
+<qandadiv xml:id="faq.known_bugs" xreflabel="Known Bugs">
+
+
+<qandaentry xml:id="faq.what_works">
+ <question xml:id="q-what_works">
+ <para>
+ What works already?
+ </para>
+ </question>
+ <answer xml:id="a-what_works">
+ <para>
+ Short answer: Pretty much everything <emphasis>works</emphasis>
+ except for some corner cases. Support for localization
+ in <classname>locale</classname> may be incomplete on non-GNU
+ platforms. Also dependent on the underlying platform is support
+ for <type>wchar_t</type> and <type>long
+ long</type> specializations, and details of thread support.
+ </para>
+ <para>
+ 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.2011">C++11</link>.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.standard_bugs">
+ <question xml:id="q-standard_bugs">
+ <para>
+ Bugs in the ISO C++ language or library specification
+ </para>
+ </question>
+ <answer xml:id="a-standard_bugs">
+ <para>
+ Unfortunately, there are some.
+ </para>
+ <para>
+ 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 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 the author of
+ the library issues list or the Usenet group comp.lang.c++.moderated.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.compiler_bugs">
+ <question xml:id="q-compiler_bugs">
+ <para>
+ Bugs in the compiler (gcc/g++) and not libstdc++
+ </para>
+ </question>
+ <answer xml:id="a-compiler_bugs">
+ <para>
+ On occasion, the compiler is wrong. Please be advised that this
+ happens much less often than one would think, and avoid jumping to
+ conclusions.
+ </para>
+ <para>
+ First, examine the ISO C++ standard. Second, try another compiler
+ or an older version of the GNU compilers. Third, you can find more
+ information on the libstdc++ and the GCC mailing lists: search
+ these lists with terms describing your issue.
+ </para>
+ <para>
+ Before reporting a bug, please examine the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/bugs/">bugs database</link> with the
+ category set to <quote>g++</quote>.
+ </para>
+ </answer>
+</qandaentry>
+
+</qandadiv>
+
+<!-- Known Non-Bugs -->
+<qandadiv xml:id="faq.known_non-bugs" xreflabel="Known Non-Bugs">
+
+
+<qandaentry xml:id="faq.stream_reopening_fails">
+ <question xml:id="q-stream_reopening_fails">
+ <para>
+ Reopening a stream fails
+ </para>
+ </question>
+ <answer xml:id="a-stream_reopening_fails">
+ <para>
+ One of the most-reported non-bug reports. Executing a sequence like:
+ </para>
+
+ <literallayout class="normal">
+ #include &lt;fstream&gt;
+ ...
+ std::fstream fs(<quote>a_file</quote>);
+ // .
+ // . do things with fs...
+ // .
+ fs.close();
+ fs.open(<quote>a_new_file</quote>);
+ </literallayout>
+
+ <para>
+ All operations on the re-opened <varname>fs</varname> will fail, or at
+ least act very strangely. Yes, they often will, especially if
+ <varname>fs</varname> reached the EOF state on the previous file. The
+ reason is that the state flags are <emphasis>not</emphasis> cleared
+ on a successful call to open(). The standard unfortunately did
+ not specify behavior in this case, and to everybody's great sorrow,
+ the <link linkend="manual.intro.status.bugs">proposed LWG resolution in
+ DR #22</link> is to leave the flags unchanged. You must insert a call
+ to <function>fs.clear()</function> between the calls to close() and open(),
+ and then everything will work like we all expect it to work.
+ <emphasis>Update:</emphasis> for GCC 4.0 we implemented the resolution
+ of <link linkend="manual.intro.status.bugs">DR #409</link> and open()
+ now calls <function>clear()</function> on success!
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.wefcxx_verbose">
+ <question xml:id="q-wefcxx_verbose">
+ <para>
+ -Weffc++ complains too much
+ </para>
+ </question>
+ <answer xml:id="a-wefcxx_verbose">
+ <para>
+ Many warnings are emitted when <literal>-Weffc++</literal> is used. Making
+ libstdc++ <literal>-Weffc++</literal>-clean is not a goal of the project,
+ for a few reasons. Mainly, that option tries to enforce
+ object-oriented programming, while the Standard Library isn't
+ necessarily trying to be OO.
+ </para>
+ <para>
+ We do, however, try to have libstdc++ sources as clean as possible. If
+ you see some simple changes that pacify <literal>-Weffc++</literal>
+ without other drawbacks, send us a patch.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.ambiguous_overloads">
+ <question xml:id="q-ambiguous_overloads">
+ <para>
+ Ambiguous overloads after including an old-style header
+ </para>
+ </question>
+ <answer xml:id="a-ambiguous_overloads">
+ <para>
+ Another problem is the <literal>rel_ops</literal> namespace and the template
+ comparison operator functions contained therein. If they become
+ visible in the same namespace as other comparison functions
+ (e.g., <quote>using</quote> 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
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html">sums
+ things up here</link>. The collisions with vector/string iterator
+ types have been fixed for 3.1.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.v2_headers">
+ <question xml:id="q-v2_headers">
+ <para>
+ The g++-3 headers are <emphasis>not ours</emphasis>
+ </para>
+ </question>
+ <answer xml:id="a-v2_headers">
+ <para>
+ If you are using headers in
+ <filename>${prefix}/include/g++-3</filename>, or if the installed
+ library's name looks like <filename>libstdc++-2.10.a</filename> or
+ <filename>libstdc++-libc6-2.10.so</filename>, then you are using the
+ old libstdc++-v2 library, which is nonstandard and
+ unmaintained. Do not report problems with -v2 to the -v3
+ mailing list.
+ </para>
+ <para>
+ For GCC versions 3.0 and 3.1 the libstdc++ header files are
+ installed in <filename>${prefix}/include/g++-v3</filename> (see the
+ 'v'?). Starting with version 3.2 the headers are installed in
+ <filename>${prefix}/include/c++/${version}</filename> as this prevents
+ headers from previous versions being found by mistake.
+ </para>
+
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.boost_concept_checks">
+ <question xml:id="q-boost_concept_checks">
+ <para>
+ Errors about <emphasis>*Concept</emphasis> and
+ <emphasis>constraints</emphasis> in the STL
+ </para>
+ </question>
+ <answer xml:id="a-boost_concept_checks">
+ <para>
+ If you see compilation errors containing messages about
+ <errortext>foo Concept </errortext>and something to do with a
+ <errortext>constraints</errortext> member function, then most
+ likely you have violated one of the requirements for types used
+ during instantiation of template containers and functions. For
+ example, EqualityComparableConcept appears if your types must be
+ comparable with == and you have not provided this capability (a
+ typo, or wrong visibility, or you just plain forgot, etc).
+ </para>
+ <para>
+ More information, including how to optionally enable/disable the
+ checks, is available in the
+ <link linkend="std.diagnostics.concept_checking">Diagnostics</link>.
+ chapter of the manual.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.dlopen_crash">
+ <question xml:id="q-dlopen_crash">
+ <para>
+ Program crashes when using library code in a
+ dynamically-loaded library
+ </para>
+ </question>
+ <answer xml:id="a-dlopen_crash">
+ <para>
+ If you are using the C++ library across dynamically-loaded
+ objects, make certain that you are passing the correct options
+ when compiling and linking:
+ </para>
+
+ <literallayout class="normal">
+ // compile your library components
+ g++ -fPIC -c a.cc
+ g++ -fPIC -c b.cc
+ ...
+ g++ -fPIC -c z.cc
+
+ // create your library
+ g++ -fPIC -shared -rdynamic -o libfoo.so a.o b.o ... z.o
+
+ // link the executable
+ g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl
+ </literallayout>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.memory_leaks">
+ <question xml:id="q-memory_leaks">
+ <para>
+ <quote>Memory leaks</quote> in containers
+ </para>
+ </question>
+ <answer xml:id="a-memory_leaks">
+ <para>
+ A few people have reported that the standard containers appear
+ to leak memory when tested with memory checkers such as
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://valgrind.org/">valgrind</link>.
+ Under some configurations the library's 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
+ lost, memory debugging tools can report it as a leak. If you
+ want to test the library for memory leaks please read
+ <link linkend="debug.memory">Tips for memory leak hunting</link>
+ first.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.list_size_on">
+ <question xml:id="q-list_size_on">
+ <para>
+ list::size() is O(n)!
+ </para>
+ </question>
+ <answer xml:id="a-list_size_on">
+ <para>
+ See
+ the <link linkend="std.containers">Containers</link>
+ chapter.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.easy_to_fix">
+ <question xml:id="q-easy_to_fix">
+ <para>
+ Aw, that's easy to fix!
+ </para>
+ </question>
+ <answer xml:id="a-easy_to_fix">
+ <para>
+ 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/contribute.html">submitting
+ patches</link> 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++
+ <link linkend="appendix.contrib">contributors' page</link>
+ also talks about how to submit patches.
+ </para>
+ <para>
+ In addition to the description, the patch, and the ChangeLog
+ entry, it is a Good Thing if you can additionally create a small
+ test program to test for the presence of the bug that your patch
+ fixes. Bugs have a way of being reintroduced; if an old bug
+ creeps back in, it will be caught immediately by the testsuite -
+ but only if such a test exists.
+ </para>
+ </answer>
+</qandaentry>
+
+</qandadiv>
+
+
+<!-- Miscellaneous -->
+<qandadiv xml:id="faq.misc" xreflabel="Miscellaneous">
+
+
+<qandaentry xml:id="faq.iterator_as_pod">
+ <question xml:id="faq.iterator_as_pod_q">
+ <para>
+ string::iterator is not char*; vector&lt;T&gt;::iterator is not T*
+ </para>
+ </question>
+ <answer xml:id="faq.iterator_as_pod_a">
+ <para>
+ 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.
+ </para>
+ <para>
+ While there are arguments for iterators to be implemented in
+ that manner, A) they aren't very good ones in the long term,
+ and B) they were never guaranteed by the Standard anyway. The
+ type-safety achieved by making iterators a real class rather
+ than a typedef for <type>T*</type> outweighs nearly all opposing
+ arguments.
+ </para>
+ <para>
+ Code which does assume that a vector iterator <varname>i</varname>
+ is a pointer can often be fixed by changing <varname>i</varname> in
+ certain expressions to <varname>&amp;*i</varname>. Future revisions
+ of the Standard are expected to bless this usage for
+ vector&lt;&gt; (but not for basic_string&lt;&gt;).
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.what_is_next">
+ <question xml:id="q-what_is_next">
+ <para>
+ What's next after libstdc++?
+ </para>
+ </question>
+ <answer xml:id="a-what_is_next">
+ <para>
+ 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 <emphasis>be</emphasis> any
+ more compliance work to do.
+ </para>
+ <para>
+ There is an effort underway to add significant extensions to
+ the standard library specification. The latest version of
+ this effort is described in
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
+ The C++ Library Technical Report 1</link>.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.sgi_stl">
+ <question xml:id="q-sgi_stl">
+ <para>
+ What about the STL from SGI?
+ </para>
+ </question>
+ <answer xml:id="a-sgi_stl">
+ <para>
+ The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/">STL from SGI</link>,
+ 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
+ development. We expect that no future merges will take place.
+ </para>
+ <para>
+ In particular, <classname>string</classname> is not from SGI and makes no
+ use of their "rope" class (which is included as an
+ optional extension), nor is <classname>valarray</classname> and some others.
+ Classes like <classname>vector&lt;&gt;</classname> are, but have been
+ extensively modified.
+ </para>
+ <para>
+ More information on the evolution of libstdc++ can be found at the
+ <link linkend="appendix.porting.api">API
+ evolution</link>
+ and <link linkend="manual.appendix.porting.backwards">backwards
+ compatibility</link> documentation.
+ </para>
+ <para>
+ The FAQ for SGI's STL (one jump off of their main page) is
+ still recommended reading.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.extensions_and_backwards_compat">
+ <question xml:id="q-extensions_and_backwards_compat">
+ <para>
+ Extensions and Backward Compatibility
+ </para>
+ </question>
+ <answer xml:id="a-extensions_and_backwards_compat">
+ <para>
+ See the <link linkend="manual.appendix.porting.backwards">link</link> on backwards compatibility and <link linkend="appendix.porting.api">link</link> on evolution.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.tr1_support">
+ <question xml:id="q-tr1_support">
+ <para>
+ Does libstdc++ support TR1?
+ </para>
+ </question>
+ <answer xml:id="a-tr1_support">
+ <para>
+ Yes.
+ </para>
+ <para>
+ The C++ Standard Library Technical Report adds many new features to
+ the library. The latest version of this effort is described in
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
+ Technical Report 1</link>.
+ </para>
+ <para>
+ The implementation status of TR1 in libstdc++ can be tracked <link linkend="status.iso.tr1">on the TR1 status
+ page</link>.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.get_iso_cxx">
+ <question xml:id="q-get_iso_cxx">
+ <para>How do I get a copy of the ISO C++ Standard?
+ </para>
+ </question>
+ <answer xml:id="a-get_iso_cxx">
+ <para>
+ 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
+ and sustained their 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 website 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>.
+ </para>
+ <para>
+ Who is your country's member body? Visit the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.iso.ch/">ISO homepage</link> and find out!
+ </para>
+ <para>
+ The 2003 version of the standard (the 1998 version plus TC1) is
+ available in print, ISBN 0-470-84674-7.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.what_is_abi">
+ <question xml:id="q-what_is_abi">
+ <para>
+ What's an ABI and why is it so messy?
+ </para>
+ </question>
+ <answer xml:id="a-what_is_abi">
+ <para>
+ <acronym>ABI</acronym> stands for <quote>Application Binary
+ Interface</quote>. Conventionally, it refers to a great
+ mass of details about how arguments are arranged on the call
+ stack and/or in registers, and how various types are arranged
+ and padded in structs. A single CPU design may suffer
+ multiple ABIs designed by different development tool vendors
+ who made different choices, or even by the same vendor for
+ different target applications or compiler versions. In ideal
+ circumstances the CPU designer presents one ABI and all the
+ OSes and compilers use it. In practice every ABI omits
+ details that compiler implementers (consciously or
+ accidentally) must choose for themselves.
+ </para>
+ <para>
+ That ABI definition suffices for compilers to generate code so a
+ program can interact safely with an OS and its lowest-level libraries.
+ Users usually want an ABI to encompass more detail, allowing libraries
+ built with different compilers (or different releases of the same
+ compiler!) to be linked together. For C++, this includes many more
+ details than for C, and CPU designers (for good reasons elaborated
+ below) have not stepped up to publish C++ ABIs. The details include
+ virtual function implementation, struct inheritance layout, name
+ mangling, and exception handling. Such an ABI has been defined for
+ GNU C++, and is immediately useful for embedded work relying only on
+ a <quote>free-standing implementation</quote> that doesn't include (much
+ of) the standard library. It is a good basis for the work to come.
+ </para>
+ <para>
+ A useful C++ ABI must also incorporate many details of the standard
+ library implementation. For a C ABI, the layouts of a few structs
+ (such as FILE, stat, jmpbuf, and the like) and a few macros suffice.
+ For C++, the details include the complete set of names of functions
+ and types used, the offsets of class members and virtual functions,
+ and the actual definitions of all inlines. C++ exposes many more
+ library details to the caller than C does. It makes defining
+ a complete ABI a much bigger undertaking, and requires not just
+ documenting library implementation details, but carefully designing
+ those details so that future bug fixes and optimizations don't
+ force breaking the ABI.
+ </para>
+ <para>
+ There are ways to help isolate library implementation details from the
+ ABI, but they trade off against speed. Library details used in
+ inner loops (e.g., getchar) must be exposed and frozen for all
+ time, but many others may reasonably be kept hidden from user code,
+ 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.
+ </para>
+ </answer>
+</qandaentry>
+
+<qandaentry xml:id="faq.size_equals_capacity">
+ <question xml:id="q-size_equals_capacity">
+ <para>
+ How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
+ </para>
+ </question>
+ <answer xml:id="a-size_equals_capacity">
+ <para>
+ The standard idiom for deallocating a <classname>vector&lt;T&gt;</classname>'s
+ unused memory is to create a temporary copy of the vector and swap their
+ contents, e.g. for <classname>vector&lt;T&gt; v</classname>
+ </para>
+ <literallayout class="normal">
+ std::vector&lt;T&gt;(v).swap(v);
+ </literallayout>
+ <para>
+ The copy will take O(n) time and the swap is constant time.
+ </para>
+ <para>
+ See <link linkend="strings.string.shrink">Shrink-to-fit
+ strings</link> for a similar solution for strings.
+ </para>
+ </answer>
+</qandaentry>
+
+</qandadiv>
+
+
+<!-- FAQ ends here -->
+</qandaset>
+
+</article>
+
+</book>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/gnu/fdl-1.3.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
new file mode 100644
index 000000000..9500e11fe
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
@@ -0,0 +1,562 @@
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.gfdl-1.3">
+<info><title>GNU Free Documentation License</title></info>
+ <?dbhtml filename="appendix_gfdl.html"?>
+
+ <simpara>Version 1.3, 3 November 2008</simpara>
+ <simpara>
+ Copyright © 2000, 2001, 2002, 2007, 2008
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org/">Free Software Foundation, Inc.</link>
+ </simpara>
+ <simpara>
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section0" renderas="sect2">
+ 0. PREAMBLE
+ </bridgehead>
+ <simpara>
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document “free” in the sense of freedom:
+ to assure everyone the effective freedom to copy and redistribute it, with
+ or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the author and
+ publisher a way to get credit for their work, while not being considered
+ responsible for modifications made by others.
+ </simpara>
+ <simpara>
+ This License is a kind of “copyleft”, which means that
+ derivative works of the document must themselves be free in the same
+ sense. It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+ </simpara>
+ <simpara>
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free program
+ should come with manuals providing the same freedoms that the software
+ does. But this License is not limited to software manuals; it can be used
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section1" renderas="sect2">
+ 1. APPLICABILITY AND DEFINITIONS
+ </bridgehead>
+ <simpara>
+ This License applies to any manual or other work, in any medium, that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License. Such a notice grants a
+ world-wide, royalty-free license, unlimited in duration, to use that work
+ under the conditions stated herein. The “Document”, below,
+ refers to any such manual or work. Any member of the public is a licensee,
+ and is addressed as “you”. You accept the license if you copy,
+ modify or distribute the work in a way requiring permission under
+ copyright law.
+ </simpara>
+ <simpara>
+ A “Modified Version” of the Document means any work containing
+ the Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ </simpara>
+ <simpara>
+ A “Secondary Section” is a named appendix or a front-matter
+ section of the Document that deals exclusively with the relationship of
+ the publishers or authors of the Document to the Document’s overall
+ subject (or to related matters) and contains nothing that could fall
+ directly within that overall subject. (Thus, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.) The relationship could be a matter of historical connection
+ with the subject or with related matters, or of legal, commercial,
+ philosophical, ethical or political position regarding them.
+ </simpara>
+ <simpara>
+ The “Invariant Sections” are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the notice
+ that says that the Document is released under this License. If a section
+ does not fit the above definition of Secondary then it is not allowed to
+ be designated as Invariant. The Document may contain zero Invariant
+ Sections. If the Document does not identify any Invariant Sections then
+ there are none.
+ </simpara>
+ <simpara>
+ The “Cover Texts” are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says
+ that the Document is released under this License. A Front-Cover Text may
+ be at most 5 words, and a Back-Cover Text may be at most 25 words.
+ </simpara>
+ <simpara>
+ A “Transparent” copy of the Document means a machine-readable
+ copy, represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed of
+ pixels) generic paint programs or (for drawings) some widely available
+ drawing editor, and that is suitable for input to text formatters or for
+ automatic translation to a variety of formats suitable for input to text
+ formatters. A copy made in an otherwise Transparent file format whose
+ markup, or absence of markup, has been arranged to thwart or discourage
+ subsequent modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A copy that is
+ not “Transparent” is called “Opaque”.
+ </simpara>
+ <simpara>
+ Examples of suitable formats for Transparent copies include plain ASCII
+ without markup, Texinfo input format, LaTeX input format, SGML or XML
+ using a publicly available DTD, and standard-conforming simple HTML,
+ PostScript or PDF designed for human modification. Examples of transparent
+ image formats include PNG, XCF and JPG. Opaque formats include proprietary
+ formats that can be read and edited only by proprietary word processors,
+ SGML or XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF produced by
+ some word processors for output purposes only.
+ </simpara>
+ <simpara>
+ The “Title Page” means, for a printed book, the title page
+ itself, plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For works in
+ formats which do not have any title page as such, “Title Page”
+ means the text near the most prominent appearance of the work’s
+ title, preceding the beginning of the body of the text.
+ </simpara>
+ <simpara>
+ The “publisher” means any person or entity that distributes
+ copies of the Document to the public.
+ </simpara>
+ <simpara>
+ A section “Entitled XYZ” means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ stands
+ for a specific section name mentioned below, such as
+ “Acknowledgements”, “Dedications”,
+ “Endorsements”, or “History”.) To “Preserve
+ the Title” of such a section when you modify the Document means that
+ it remains a section “Entitled XYZ” according to this
+ definition.
+ </simpara>
+ <simpara>
+ The Document may include Warranty Disclaimers next to the notice which
+ states that this License applies to the Document. These Warranty
+ Disclaimers are considered to be included by reference in this License,
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section2" renderas="sect2">
+ 2. VERBATIM COPYING
+ </bridgehead>
+ <simpara>
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the copyright
+ notices, and the license notice saying this License applies to the
+ Document are reproduced in all copies, and that you add no other
+ conditions whatsoever to those of this License. You may not use technical
+ measures to obstruct or control the reading or further copying of the
+ copies you make or distribute. However, you may accept compensation in
+ exchange for copies. If you distribute a large enough number of copies you
+ must also follow the conditions in section 3.
+ </simpara>
+ <simpara>
+ You may also lend copies, under the same conditions stated above, and you
+ may publicly display copies.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section3" renderas="sect2">
+ 3. COPYING IN QUANTITY
+ </bridgehead>
+ <simpara>
+ If you publish printed copies (or copies in media that commonly have
+ printed covers) of the Document, numbering more than 100, and the
+ Document’s license notice requires Cover Texts, you must enclose
+ the copies in covers that carry, clearly and legibly, all these Cover
+ Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the
+ back cover. Both covers must also clearly and legibly identify you as the
+ publisher of these copies. The front cover must present the full title
+ with all words of the title equally prominent and visible. You may add
+ other material on the covers in addition. Copying with changes limited to
+ the covers, as long as they preserve the title of the Document and satisfy
+ these conditions, can be treated as verbatim copying in other respects.
+ </simpara>
+ <simpara>
+ If the required texts for either cover are too voluminous to fit legibly,
+ you should put the first ones listed (as many as fit reasonably) on the
+ actual cover, and continue the rest onto adjacent pages.
+ </simpara>
+ <simpara>
+ If you publish or distribute Opaque copies of the Document numbering more
+ than 100, you must either include a machine-readable Transparent copy
+ along with each Opaque copy, or state in or with each Opaque copy a
+ computer-network location from which the general network-using public has
+ access to download using public-standard network protocols a complete
+ Transparent copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you begin
+ distribution of Opaque copies in quantity, to ensure that this Transparent
+ copy will remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+ </simpara>
+ <simpara>
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section4" renderas="sect2">
+ 4. MODIFICATIONS
+ </bridgehead>
+ <simpara>
+ You may copy and distribute a Modified Version of the Document under the
+ conditions of sections 2 and 3 above, provided that you release the
+ Modified Version under precisely this License, with the Modified Version
+ 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:
+ </simpara>
+ <orderedlist numeration="upperalpha">
+ <listitem>
+ <simpara>
+ 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
+ Document). You may use the same title as a previous version if the
+ original publisher of that version gives permission.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ State on the Title page the name of the publisher of the Modified
+ Version, as the publisher.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve all the copyright notices of the Document.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Add an appropriate copyright notice for your modifications adjacent to
+ the other copyright notices.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document’s license
+ notice.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Include an unaltered copy of this License.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve the section Entitled “History”, Preserve its
+ Title, and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the Title
+ Page. If there is no section Entitled “History” in the
+ Document, create one stating the title, year, authors, and publisher
+ of the Document as given on its Title Page, then add an item
+ describing the Modified Version as stated in the previous sentence.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise the
+ network locations given in the Document for previous versions it was
+ based on. These may be placed in the “History”
+ section. You may omit a network location for a work that was published
+ at least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ For any section Entitled “Acknowledgements” or
+ “Dedications”, Preserve the Title of the section, and
+ preserve in the section all the substance and tone of each of the
+ contributor acknowledgements and/or dedications given therein.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve all the Invariant Sections of the Document, unaltered in
+ their text and in their titles. Section numbers or the equivalent are
+ not considered part of the section titles.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Delete any section Entitled “Endorsements”. Such a section
+ may not be included in the Modified Version.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Do not retitle any existing section to be Entitled
+ “Endorsements” or to conflict in title with any Invariant
+ Section.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve any Warranty Disclaimers.
+ </simpara>
+ </listitem>
+ </orderedlist>
+ <simpara>
+ If the Modified Version includes new front-matter sections or appendices
+ that qualify as Secondary Sections and contain no material copied from the
+ Document, you may at your option designate some or all of these sections
+ as invariant. To do this, add their titles to the list of Invariant
+ Sections in the Modified Version’s license notice. These titles
+ must be distinct from any other section titles.
+ </simpara>
+ <simpara>
+ You may add a section Entitled “Endorsements”, provided it
+ contains nothing but endorsements of your Modified Version by various
+ parties — for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative definition of a
+ standard.
+ </simpara>
+ <simpara>
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list of
+ Cover Texts in the Modified Version. Only one passage of Front-Cover Text
+ and one of Back-Cover Text may be added by (or through arrangements made
+ by) any one entity. If the Document already includes a cover text for the
+ same cover, previously added by you or by arrangement made by the same
+ entity you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous publisher
+ that added the old one.
+ </simpara>
+ <simpara>
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section5" renderas="sect2">
+ 5. COMBINING DOCUMENTS
+ </bridgehead>
+ <simpara>
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified versions,
+ provided that you include in the combination all of the Invariant Sections
+ of all of the original documents, unmodified, and list them all as
+ Invariant Sections of your combined work in its license notice, and that
+ you preserve all their Warranty Disclaimers.
+ </simpara>
+ <simpara>
+ The combined work need only contain one copy of this License, and multiple
+ identical Invariant Sections may be replaced with a single copy. If there
+ are multiple Invariant Sections with the same name but different contents,
+ make the title of each such section unique by adding at the end of it, in
+ parentheses, the name of the original author or publisher of that section
+ if known, or else a unique number. Make the same adjustment to the section
+ titles in the list of Invariant Sections in the license notice of the
+ combined work.
+ </simpara>
+ <simpara>
+ In the combination, you must combine any sections Entitled
+ “History” in the various original documents, forming one
+ section Entitled “History”; likewise combine any sections
+ Entitled “Acknowledgements”, and any sections Entitled
+ “Dedications”. You must delete all sections Entitled
+ “Endorsements”.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section6" renderas="sect2">
+ 6. COLLECTIONS OF DOCUMENTS
+ </bridgehead>
+ <simpara>
+ You may make a collection consisting of the Document and other documents
+ released under this License, and replace the individual copies of this
+ License in the various documents with a single copy that is included in
+ the collection, provided that you follow the rules of this License for
+ verbatim copying of each of the documents in all other respects.
+ </simpara>
+ <simpara>
+ You may extract a single document from such a collection, and distribute
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section7" renderas="sect2">
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+ </bridgehead>
+ <simpara>
+ A compilation of the Document or its derivatives with other separate and
+ independent documents or works, in or on a volume of a storage or
+ distribution medium, is called an “aggregate” if the copyright
+ resulting from the compilation is not used to limit the legal rights of
+ the compilation’s users beyond what the individual works
+ permit. When the Document is included in an aggregate, this License does
+ not apply to the other works in the aggregate which are not themselves
+ derivative works of the Document.
+ </simpara>
+ <simpara>
+ If the Cover Text requirement of section 3 is applicable to these copies
+ of the Document, then if the Document is less than one half of the entire
+ aggregate, the Document’s Cover Texts may be placed on covers that
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section8" renderas="sect2">
+ 8. TRANSLATION
+ </bridgehead>
+ <simpara>
+ Translation is considered a kind of modification, so you may distribute
+ translations of the Document under the terms of section 4. Replacing
+ Invariant Sections with translations requires special permission from
+ their copyright holders, but you may include translations of some or all
+ Invariant Sections in addition to the original versions of these Invariant
+ Sections. You may include a translation of this License, and all the
+ license notices in the Document, and any Warranty Disclaimers, provided
+ that you also include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of this
+ License or a notice or disclaimer, the original version will prevail.
+ </simpara>
+ <simpara>
+ If a section in the Document is Entitled “Acknowledgements”,
+ “Dedications”, or “History”, the requirement
+ (section 4) to Preserve its Title (section 1) will typically require
+ changing the actual title.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section9" renderas="sect2">
+ 9. TERMINATION
+ </bridgehead>
+ <simpara>
+ You may not copy, modify, sublicense, or distribute the Document except as
+ expressly provided under this License. Any attempt otherwise to copy,
+ modify, sublicense, or distribute it is void, and will automatically
+ terminate your rights under this License.
+ </simpara>
+ <simpara>
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally, unless
+ and until the copyright holder explicitly and finally terminates your
+ license, and (b) permanently, if the copyright holder fails to notify you
+ of the violation by some reasonable means prior to 60 days after the
+ cessation.
+ </simpara>
+ <simpara>
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by some
+ reasonable means, this is the first time you have received notice of
+ violation of this License (for any work) from that copyright holder, and
+ you cure the violation prior to 30 days after your receipt of the notice.
+ </simpara>
+ <simpara>
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under this
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section10" renderas="sect2">
+ 10. FUTURE REVISIONS OF THIS LICENSE
+ </bridgehead>
+ <simpara>
+ 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
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/copyleft/">Copyleft</link>.
+ </simpara>
+ <simpara>
+ Each version of the License is given a distinguishing version number. If
+ the Document specifies that a particular numbered version of this License
+ “or any later version” applies to it, you have the option of
+ following the terms and conditions either of that specified version or of
+ any later version that has been published (not as a draft) by the Free
+ Software Foundation. If the Document does not specify a version number of
+ this License, you may choose any version ever published (not as a draft)
+ by the Free Software Foundation. If the Document specifies that a proxy
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section11" renderas="sect2">
+ 11. RELICENSING
+ </bridgehead>
+ <simpara>
+ “Massive Multiauthor Collaboration Site” (or “MMC
+ Site”) means any World Wide Web server that publishes copyrightable
+ works and also provides prominent facilities for anybody to edit those
+ works. A public wiki that anybody can edit is an example of such a
+ server. A “Massive Multiauthor Collaboration” (or
+ “MMC”) contained in the site means any set of copyrightable
+ works thus published on the MMC site.
+ </simpara>
+ <simpara>
+ “CC-BY-SA” means the Creative Commons Attribution-Share Alike
+ 3.0 license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license published
+ by that same organization.
+ </simpara>
+ <simpara>
+ “Incorporate” means to publish or republish a Document, in
+ whole or in part, as part of another Document.
+ </simpara>
+ <simpara>
+ An MMC is “eligible for relicensing” if it is licensed under
+ this License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently incorporated in
+ whole or in part into the MMC, (1) had no cover texts or invariant
+ sections, and (2) were thus incorporated prior to November 1, 2008.
+ </simpara>
+ <simpara>
+ 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.
+ </simpara>
+ <bridgehead xml:id="fdl-1-addendum" renderas="sect2">
+ ADDENDUM: How to use this License for your documents
+ </bridgehead>
+ <simpara>
+ To use this License in a document you have written, include a copy of the
+ License in the document and put the following copyright and license
+ notices just after the title page:
+ </simpara>
+ <screen>Copyright © YEAR YOUR NAME
+
+Permission is granted to copy, distribute and/or modify this document under the
+terms of the GNU Free Documentation License, Version 1.3 or any later version
+published by the Free Software Foundation; with no Invariant Sections, no
+Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in
+the section entitled “GNU Free Documentation License”.</screen>
+ <simpara>
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+ replace the “with… Texts.” line with this:
+ </simpara>
+ <screen>with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts
+being LIST, and with the Back-Cover Texts being LIST.</screen>
+ <simpara>
+ If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+ </simpara>
+ <simpara>
+ If your document contains nontrivial examples of program code, we
+ 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.
+ </simpara>
+</appendix>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/gnu/gpl-3.0.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
new file mode 100644
index 000000000..d5a5eae20
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
@@ -0,0 +1,834 @@
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.gpl-3.0"><info><title>
+ <acronym>GNU</acronym> General Public License version 3
+ </title></info>
+ <?dbhtml filename="appendix_gpl.html"?>
+
+ <para>
+ Version 3, 29 June 2007
+ </para>
+ <para>
+ Copyright © 2007 Free Software Foundation, Inc.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org/">http://www.fsf.org/</link>
+ </para>
+ <para>
+ Everyone is permitted to copy and distribute verbatim copies of this license
+ document, but changing it is not allowed.
+ </para>
+ <bridgehead xml:id="gpl-3-preamble" renderas="sect1">
+ Preamble
+ </bridgehead>
+ <para>
+ The <acronym>GNU</acronym> General Public License is a free, copyleft
+ license for software and other kinds of works.
+ </para>
+ <para>
+ The licenses for most software and other practical works are designed to
+ take away your freedom to share and change the works. By contrast, the
+ <acronym>GNU</acronym> General Public License is intended to guarantee your
+ freedom to share and change all versions of a program—to make sure it
+ remains free software for all its users. We, the Free Software Foundation,
+ use the <acronym>GNU</acronym> General Public License for most of our
+ software; it applies also to any other work released this way by its
+ authors. You can apply it to your programs, too.
+ </para>
+ <para>
+ When we speak of free software, we are referring to freedom, not price. Our
+ General Public Licenses are designed to make sure that you have the freedom
+ to distribute copies of free software (and charge for them if you wish),
+ that you receive source code or can get it if you want it, that you can
+ change the software or use pieces of it in new free programs, and that you
+ know you can do these things.
+ </para>
+ <para>
+ To protect your rights, we need to prevent others from denying you these
+ rights or asking you to surrender the rights. Therefore, you have certain
+ responsibilities if you distribute copies of the software, or if you modify
+ it: responsibilities to respect the freedom of others.
+ </para>
+ <para>
+ For example, if you distribute copies of such a program, whether gratis or
+ for a fee, you must pass on to the recipients the same freedoms that you
+ received. You must make sure that they, too, receive or can get the source
+ code. And you must show them these terms so they know their rights.
+ </para>
+ <para>
+ Developers that use the <acronym>GNU</acronym> <acronym>GPL</acronym>
+ protect your rights with two steps: (1) assert copyright on the software,
+ and (2) offer you this License giving you legal permission to copy,
+ distribute and/or modify it.
+ </para>
+ <para>
+ For the developers’ and authors’ protection, the
+ <acronym>GPL</acronym> clearly explains that there is no warranty for this
+ free software. For both users’ and authors’ sake, the
+ <acronym>GPL</acronym> requires that modified versions be marked as changed,
+ so that their problems will not be attributed erroneously to authors of
+ previous versions.
+ </para>
+ <para>
+ Some devices are designed to deny users access to install or run modified
+ versions of the software inside them, although the manufacturer can do so.
+ This is fundamentally incompatible with the aim of protecting users’
+ freedom to change the software. The systematic pattern of such abuse occurs
+ in the area of products for individuals to use, which is precisely where it
+ is most unacceptable. Therefore, we have designed this version of the
+ <acronym>GPL</acronym> to prohibit the practice for those products. If such
+ problems arise substantially in other domains, we stand ready to extend this
+ provision to those domains in future versions of the <acronym>GPL</acronym>,
+ as needed to protect the freedom of users.
+ </para>
+ <para>
+ Finally, every program is threatened constantly by software patents. States
+ should not allow patents to restrict development and use of software on
+ general-purpose computers, but in those that do, we wish to avoid the
+ special danger that patents applied to a free program could make it
+ effectively proprietary. To prevent this, the <acronym>GPL</acronym>
+ assures that patents cannot be used to render the program non-free.
+ </para>
+ <para>
+ The precise terms and conditions for copying, distribution and modification
+ follow.
+ </para>
+ <bridgehead>
+ TERMS AND CONDITIONS
+ </bridgehead>
+ <bridgehead xml:id="gpl-3-definitions" renderas="sect1">
+ 0. Definitions.
+ </bridgehead>
+ <para>
+ “This License” refers to version 3 of the <acronym>GNU</acronym>
+ General Public License.
+ </para>
+ <para>
+ “Copyright” also means copyright-like laws that apply to other
+ kinds of works, such as semiconductor masks.
+ </para>
+ <para>
+ “The Program” refers to any copyrightable work licensed under
+ this License. Each licensee is addressed as “you”.
+ “Licensees” and “recipients” may be individuals or
+ organizations.
+ </para>
+ <para>
+ To “modify” a work means to copy from or adapt all or part of
+ the work in a fashion requiring copyright permission, other than the making
+ of an exact copy. The resulting work is called a “modified
+ version” of the earlier work or a work “based on” the
+ earlier work.
+ </para>
+ <para>
+ A “covered work” means either the unmodified Program or a work
+ based on the Program.
+ </para>
+ <para>
+ To “propagate” a work means to do anything with it that, without
+ permission, would make you directly or secondarily liable for infringement
+ under applicable copyright law, except executing it on a computer or
+ modifying a private copy. Propagation includes copying, distribution (with
+ or without modification), making available to the public, and in some
+ countries other activities as well.
+ </para>
+ <para>
+ To “convey” a work means any kind of propagation that enables
+ other parties to make or receive copies. Mere interaction with a user
+ through a computer network, with no transfer of a copy, is not conveying.
+ </para>
+ <para>
+ An interactive user interface displays “Appropriate Legal
+ Notices” to the extent that it includes a convenient and prominently
+ visible feature that (1) displays an appropriate copyright notice, and (2)
+ tells the user that there is no warranty for the work (except to the extent
+ that warranties are provided), that licensees may convey the work under this
+ 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.
+ </para>
+ <bridgehead xml:id="SourceCode" renderas="sect1">
+ 1. Source Code.
+ </bridgehead>
+ <para>
+ The “source code” for a work means the preferred form of the
+ work for making modifications to it. “Object code” means any
+ non-source form of a work.
+ </para>
+ <para>
+ A “Standard Interface” means an interface that either is an
+ official standard defined by a recognized standards body, or, in the case of
+ interfaces specified for a particular programming language, one that is
+ widely used among developers working in that language.
+ </para>
+ <para>
+ The “System Libraries” of an executable work include anything,
+ other than the work as a whole, that (a) is included in the normal form of
+ packaging a Major Component, but which is not part of that Major Component,
+ and (b) serves only to enable use of the work with that Major Component, or
+ to implement a Standard Interface for which an implementation is available
+ to the public in source code form. A “Major Component”, in this
+ context, means a major essential component (kernel, window system, and so
+ on) of the specific operating system (if any) on which the executable work
+ runs, or a compiler used to produce the work, or an object code interpreter
+ used to run it.
+ </para>
+ <para>
+ The “Corresponding Source” for a work in object code form means
+ all the source code needed to generate, install, and (for an executable
+ work) run the object code and to modify the work, including scripts to
+ control those activities. However, it does not include the work’s
+ System Libraries, or general-purpose tools or generally available free
+ programs which are used unmodified in performing those activities but which
+ are not part of the work. For example, Corresponding Source includes
+ interface definition files associated with source files for the work, and
+ the source code for shared libraries and dynamically linked subprograms that
+ the work is specifically designed to require, such as by intimate data
+ communication or control flow between those subprograms and other parts of
+ the work.
+ </para>
+ <para>
+ The Corresponding Source need not include anything that users can regenerate
+ automatically from other parts of the Corresponding Source.
+ </para>
+ <para>
+ The Corresponding Source for a work in source code form is that same work.
+ </para>
+ <bridgehead xml:id="BasicPermissions" renderas="sect1">
+ 2. Basic Permissions.
+ </bridgehead>
+ <para>
+ All rights granted under this License are granted for the term of copyright
+ on the Program, and are irrevocable provided the stated conditions are met.
+ This License explicitly affirms your unlimited permission to run the
+ unmodified Program. The output from running a covered work is covered by
+ this License only if the output, given its content, constitutes a covered
+ work. This License acknowledges your rights of fair use or other
+ equivalent, as provided by copyright law.
+ </para>
+ <para>
+ You may make, run and propagate covered works that you do not convey,
+ without conditions so long as your license otherwise remains in force. You
+ may convey covered works to others for the sole purpose of having them make
+ modifications exclusively for you, or provide you with facilities for
+ running those works, provided that you comply with the terms of this License
+ in conveying all material for which you do not control copyright. Those
+ thus making or running the covered works for you must do so exclusively on
+ your behalf, under your direction and control, on terms that prohibit them
+ from making any copies of your copyrighted material outside their
+ relationship with you.
+ </para>
+ <para>
+ Conveying under any other circumstances is permitted solely under the
+ conditions stated below. Sublicensing is not allowed; section 10 makes it
+ unnecessary.
+ </para>
+ <bridgehead xml:id="Protecting" renderas="sect1">
+ 3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
+ </bridgehead>
+ <para>
+ No covered work shall be deemed part of an effective technological measure
+ under any applicable law fulfilling obligations under article 11 of the WIPO
+ copyright treaty adopted on 20 December 1996, or similar laws prohibiting or
+ restricting circumvention of such measures.
+ </para>
+ <para>
+ When you convey a covered work, you waive any legal power to forbid
+ circumvention of technological measures to the extent such circumvention is
+ effected by exercising rights under this License with respect to the covered
+ work, and you disclaim any intention to limit operation or modification of
+ the work as a means of enforcing, against the work’s users, your or
+ third parties’ legal rights to forbid circumvention of technological
+ measures.
+ </para>
+ <bridgehead xml:id="ConveyingVerbatim" renderas="sect1">
+ 4. Conveying Verbatim Copies.
+ </bridgehead>
+ <para>
+ You may convey verbatim copies of the Program’s source code as you
+ receive it, in any medium, provided that you conspicuously and appropriately
+ publish on each copy an appropriate copyright notice; keep intact all
+ notices stating that this License and any non-permissive terms added in
+ accord with section 7 apply to the code; keep intact all notices of the
+ absence of any warranty; and give all recipients a copy of this License
+ along with the Program.
+ </para>
+ <para>
+ 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.
+ </para>
+ <bridgehead xml:id="ConveyingModified" renderas="sect1">
+ 5. Conveying Modified Source Versions.
+ </bridgehead>
+ <para>
+ 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:
+ </para>
+ <orderedlist numeration="loweralpha" inheritnum="ignore" continuation="restarts">
+ <listitem>
+ <para>
+ The work must carry prominent notices stating that you modified it, and
+ giving a relevant date.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The work must carry prominent notices stating that it is released under
+ this License and any conditions added under section 7. This requirement
+ modifies the requirement in section 4 to “keep intact all
+ notices”.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ You must license the entire work, as a whole, under this License to
+ anyone who comes into possession of a copy. This License will therefore
+ apply, along with any applicable section 7 additional terms, to the
+ whole of the work, and all its parts, regardless of how they are
+ packaged. This License gives no permission to license the work in any
+ other way, but it does not invalidate such permission if you have
+ separately received it.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your work need
+ not make them do so.
+ </para>
+ </listitem>
+ </orderedlist>
+ <para>
+ A compilation of a covered work with other separate and independent works,
+ which are not by their nature extensions of the covered work, and which are
+ not combined with it such as to form a larger program, in or on a volume of
+ a storage or distribution medium, is called an “aggregate” if
+ the compilation and its resulting copyright are not used to limit the access
+ 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.
+ </para>
+ <bridgehead xml:id="ConveyingNonSource" renderas="sect1">
+ 6. Conveying Non-Source Forms.
+ </bridgehead>
+ <para>
+ 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:
+ </para>
+ <orderedlist numeration="loweralpha" inheritnum="ignore" continuation="restarts">
+ <listitem>
+ <para>
+ 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
+ interchange.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Convey the object code in, or embodied in, a physical product (including
+ a physical distribution medium), accompanied by a written offer, valid
+ for at least three years and valid for as long as you offer spare parts
+ or customer support for that product model, to give anyone who possesses
+ the object code either (1) a copy of the Corresponding Source for all
+ the software in the product that is covered by this License, on a
+ durable physical medium customarily used for software interchange, for a
+ price no more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the Corresponding Source from
+ a network server at no charge.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Convey individual copies of the object code with a copy of the written
+ offer to provide the Corresponding Source. This alternative is allowed
+ only occasionally and noncommercially, and only if you received the
+ object code with such an offer, in accord with subsection 6b.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Convey the object code by offering access from a designated place
+ (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to copy
+ the object code is a network server, the Corresponding Source may be on
+ a different server (operated by you or a third party) that supports
+ equivalent copying facilities, provided you maintain clear directions
+ next to the object code saying where to find the Corresponding Source.
+ Regardless of what server hosts the Corresponding Source, you remain
+ obligated to ensure that it is available for as long as needed to
+ satisfy these requirements.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Convey the object code using peer-to-peer transmission, provided you
+ inform other peers where the object code and Corresponding Source of the
+ work are being offered to the general public at no charge under
+ subsection 6d.
+ </para>
+ </listitem>
+ </orderedlist>
+ <para>
+ A separable portion of the object code, whose source code is excluded from
+ the Corresponding Source as a System Library, need not be included in
+ conveying the object code work.
+ </para>
+ <para>
+ A “User Product” is either (1) a “consumer product”,
+ which means any tangible personal property which is normally used for
+ personal, family, or household purposes, or (2) anything designed or sold
+ for incorporation into a dwelling. In determining whether a product is a
+ consumer product, doubtful cases shall be resolved in favor of coverage.
+ For a particular product received by a particular user, “normally
+ used” refers to a typical or common use of that class of product,
+ regardless of the status of the particular user or of the way in which the
+ particular user actually uses, or expects or is expected to use, the
+ product. A product is a consumer product regardless of whether the product
+ has substantial commercial, industrial or non-consumer uses, unless such
+ uses represent the only significant mode of use of the product.
+ </para>
+ <para>
+ “Installation Information” for a User Product means any methods,
+ procedures, authorization keys, or other information required to install and
+ execute modified versions of a covered work in that User Product from a
+ modified version of its Corresponding Source. The information must suffice
+ to ensure that the continued functioning of the modified object code is in
+ no case prevented or interfered with solely because modification has been
+ made.
+ </para>
+ <para>
+ If you convey an object code work under this section in, or with, or
+ specifically for use in, a User Product, and the conveying occurs as part of
+ a transaction in which the right of possession and use of the User Product
+ is transferred to the recipient in perpetuity or for a fixed term
+ (regardless of how the transaction is characterized), the Corresponding
+ Source conveyed under this section must be accompanied by the Installation
+ Information. But this requirement does not apply if neither you nor any
+ third party retains the ability to install modified object code on the User
+ Product (for example, the work has been installed in
+ <acronym>ROM</acronym>).
+ </para>
+ <para>
+ The requirement to provide Installation Information does not include a
+ requirement to continue to provide support service, warranty, or updates for
+ a work that has been modified or installed by the recipient, or for the User
+ Product in which it has been modified or installed. Access to a network may
+ be denied when the modification itself materially and adversely affects the
+ operation of the network or violates the rules and protocols for
+ communication across the network.
+ </para>
+ <para>
+ Corresponding Source conveyed, and Installation Information provided, in
+ accord with this section must be in a format that is publicly documented
+ (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.
+ </para>
+ <bridgehead xml:id="AdditionalTerms" renderas="sect1">
+ 7. Additional Terms.
+ </bridgehead>
+ <para>
+ “Additional permissions” are terms that supplement the terms of
+ this License by making exceptions from one or more of its conditions.
+ Additional permissions that are applicable to the entire Program shall be
+ treated as though they were included in this License, to the extent that
+ they are valid under applicable law. If additional permissions apply only
+ to part of the Program, that part may be used separately under those
+ permissions, but the entire Program remains governed by this License
+ without regard to the additional permissions.
+ </para>
+ <para>
+ When you convey a copy of a covered work, you may at your option remove any
+ additional permissions from that copy, or from any part of it. (Additional
+ permissions may be written to require their own removal in certain cases
+ when you modify the work.) You may place additional permissions on
+ material, added by you to a covered work, for which you have or can give
+ appropriate copyright permission.
+ </para>
+ <para>
+ 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:
+ </para>
+ <orderedlist numeration="loweralpha" inheritnum="ignore" continuation="restarts">
+ <listitem>
+ <para>
+ Disclaiming warranty or limiting liability differently from the terms
+ of sections 15 and 16 of this License; or
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Requiring preservation of specified reasonable legal notices or author
+ attributions in that material or in the Appropriate Legal Notices
+ displayed by works containing it; or
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Declining to grant rights under trademark law for use of some trade
+ names, trademarks, or service marks; or
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Requiring indemnification of licensors and authors of that material by
+ anyone who conveys the material (or modified versions of it) with
+ contractual assumptions of liability to the recipient, for any
+ liability that these contractual assumptions directly impose on those
+ licensors and authors.
+ </para>
+ </listitem>
+ </orderedlist>
+ <para>
+ All other non-permissive additional terms are considered “further
+ restrictions” within the meaning of section 10. If the Program as
+ you received it, or any part of it, contains a notice stating that it is
+ governed by this License along with a term that is a further restriction,
+ you may remove that term. If a license document contains a further
+ restriction but permits relicensing or conveying under this License, you
+ may add to a covered work material governed by the terms of that license
+ document, provided that the further restriction does not survive such
+ relicensing or conveying.
+ </para>
+ <para>
+ If you add terms to a covered work in accord with this section, you must
+ place, in the relevant source files, a statement of the additional terms
+ that apply to those files, or a notice indicating where to find the
+ applicable terms.
+ </para>
+ <para>
+ 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.
+ </para>
+ <bridgehead xml:id="gpl-3-termination" renderas="sect1">
+ 8. Termination.
+ </bridgehead>
+ <para>
+ You may not propagate or modify a covered work except as expressly provided
+ under this License. Any attempt otherwise to propagate or modify it is
+ void, and will automatically terminate your rights under this License
+ (including any patent licenses granted under the third paragraph of section
+ 11).
+ </para>
+ <para>
+ However, if you cease all violation of this License, then your license from
+ a particular copyright holder is reinstated (a) provisionally, unless and
+ until the copyright holder explicitly and finally terminates your license,
+ and (b) permanently, if the copyright holder fails to notify you of the
+ violation by some reasonable means prior to 60 days after the cessation.
+ </para>
+ <para>
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by some
+ reasonable means, this is the first time you have received notice of
+ violation of this License (for any work) from that copyright holder, and
+ you cure the violation prior to 30 days after your receipt of the notice.
+ </para>
+ <para>
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under this
+ 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.
+ </para>
+ <bridgehead xml:id="AcceptanceNotRequired" renderas="sect1">
+ 9. Acceptance Not Required for Having Copies.
+ </bridgehead>
+ <para>
+ You are not required to accept this License in order to receive or run a
+ copy of the Program. Ancillary propagation of a covered work occurring
+ solely as a consequence of using peer-to-peer transmission to receive a
+ copy likewise does not require acceptance. However, nothing other than
+ this License grants you permission to propagate or modify any covered work.
+ 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.
+ </para>
+ <bridgehead xml:id="AutomaticDownstream" renderas="sect1">
+ 10. Automatic Licensing of Downstream Recipients.
+ </bridgehead>
+ <para>
+ Each time you convey a covered work, the recipient automatically receives a
+ license from the original licensors, to run, modify and propagate that
+ work, subject to this License. You are not responsible for enforcing
+ compliance by third parties with this License.
+ </para>
+ <para>
+ An “entity transaction” is a transaction transferring control
+ of an organization, or substantially all assets of one, or subdividing an
+ organization, or merging organizations. If propagation of a covered work
+ results from an entity transaction, each party to that transaction who
+ receives a copy of the work also receives whatever licenses to the work the
+ party’s predecessor in interest had or could give under the previous
+ paragraph, plus a right to possession of the Corresponding Source of the
+ work from the predecessor in interest, if the predecessor has it or can get
+ it with reasonable efforts.
+ </para>
+ <para>
+ You may not impose any further restrictions on the exercise of the rights
+ granted or affirmed under this License. For example, you may not impose a
+ license fee, royalty, or other charge for exercise of rights granted under
+ this License, and you may not initiate litigation (including a cross-claim
+ 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.
+ </para>
+ <bridgehead xml:id="Patents" renderas="sect1">
+ 11. Patents.
+ </bridgehead>
+ <para>
+ A “contributor” is a copyright holder who authorizes use under
+ this License of the Program or a work on which the Program is based. The
+ work thus licensed is called the contributor’s “contributor
+ version”.
+ </para>
+ <para>
+ A contributor’s “essential patent claims” are all patent
+ claims owned or controlled by the contributor, whether already acquired or
+ hereafter acquired, that would be infringed by some manner, permitted by
+ this License, of making, using, or selling its contributor version, but do
+ not include claims that would be infringed only as a consequence of further
+ modification of the contributor version. For purposes of this definition,
+ “control” includes the right to grant patent sublicenses in a
+ manner consistent with the requirements of this License.
+ </para>
+ <para>
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+ license under the contributor’s essential patent claims, to make, use,
+ sell, offer for sale, import and otherwise run, modify and propagate the
+ contents of its contributor version.
+ </para>
+ <para>
+ In the following three paragraphs, a “patent license” is any
+ express agreement or commitment, however denominated, not to enforce a
+ patent (such as an express permission to practice a patent or covenant not
+ to sue for patent infringement). To “grant” such a patent
+ license to a party means to make such an agreement or commitment not to
+ enforce a patent against the party.
+ </para>
+ <para>
+ If you convey a covered work, knowingly relying on a patent license, and the
+ Corresponding Source of the work is not available for anyone to copy, free
+ of charge and under the terms of this License, through a publicly available
+ network server or other readily accessible means, then you must either (1)
+ cause the Corresponding Source to be so available, or (2) arrange to deprive
+ yourself of the benefit of the patent license for this particular work, or
+ (3) arrange, in a manner consistent with the requirements of this License,
+ to extend the patent license to downstream recipients. “Knowingly
+ relying” means you have actual knowledge that, but for the patent
+ license, your conveying the covered work in a country, or your
+ recipient’s use of the covered work in a country, would infringe one
+ or more identifiable patents in that country that you have reason to believe
+ are valid.
+ </para>
+ <para>
+ If, pursuant to or in connection with a single transaction or arrangement,
+ you convey, or propagate by procuring conveyance of, a covered work, and
+ grant a patent license to some of the parties receiving the covered work
+ authorizing them to use, propagate, modify or convey a specific copy of the
+ covered work, then the patent license you grant is automatically extended to
+ all recipients of the covered work and works based on it.
+ </para>
+ <para>
+ A patent license is “discriminatory” if it does not include
+ within the scope of its coverage, prohibits the exercise of, or is
+ conditioned on the non-exercise of one or more of the rights that are
+ specifically granted under this License. You may not convey a covered work
+ if you are a party to an arrangement with a third party that is in the
+ business of distributing software, under which you make payment to the third
+ party based on the extent of your activity of conveying the work, and under
+ which the third party grants, to any of the parties who would receive the
+ covered work from you, a discriminatory patent license (a) in connection
+ with copies of the covered work conveyed by you (or copies made from those
+ copies), or (b) primarily for and in connection with specific products or
+ compilations that contain the covered work, unless you entered into that
+ arrangement, or that patent license was granted, prior to 28 March 2007.
+ </para>
+ <para>
+ 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.
+ </para>
+ <bridgehead xml:id="NoSurrender" renderas="sect1">
+ 12. No Surrender of Others’ Freedom.
+ </bridgehead>
+ <para>
+ If conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License. If you cannot convey a
+ covered work so as to satisfy simultaneously your obligations under this
+ License and any other pertinent obligations, then as a consequence you may
+ not convey it at all. For example, if you agree to terms that obligate you
+ 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.
+ </para>
+ <bridgehead xml:id="UsedWithAGPL" renderas="sect1">
+ 13. Use with the <acronym>GNU</acronym> Affero General Public License.
+ </bridgehead>
+ <para>
+ Notwithstanding any other provision of this License, you have permission to
+ link or combine any covered work with a work licensed under version 3 of the
+ <acronym>GNU</acronym> Affero General Public License into a single combined
+ work, and to convey the resulting work. The terms of this License will
+ continue to apply to the part which is the covered work, but the special
+ requirements of the <acronym>GNU</acronym> Affero General Public License,
+ section 13, concerning interaction through a network will apply to the
+ combination as such.
+ </para>
+ <bridgehead xml:id="RevisedVersions" renderas="sect1">
+ 14. Revised Versions of this License.
+ </bridgehead>
+ <para>
+ The Free Software Foundation may publish revised and/or new versions of the
+ <acronym>GNU</acronym> General Public 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.
+ </para>
+ <para>
+ Each version is given a distinguishing version number. If the Program
+ specifies that a certain numbered version of the <acronym>GNU</acronym>
+ General Public License “or any later version” applies to it, you
+ have the option of following the terms and conditions either of that
+ numbered version or of any later version published by the Free Software
+ Foundation. If the Program does not specify a version number of the
+ <acronym>GNU</acronym> General Public License, you may choose any version
+ ever published by the Free Software Foundation.
+ </para>
+ <para>
+ If the Program specifies that a proxy can decide which future versions of
+ the <acronym>GNU</acronym> General Public License can be used, that
+ proxy’s public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Program.
+ </para>
+ <para>
+ 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.
+ </para>
+ <bridgehead xml:id="WarrantyDisclaimer" renderas="sect1">
+ 15. Disclaimer of Warranty.
+ </bridgehead>
+ <para>
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+ OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF
+ ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ 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.
+ </para>
+ <bridgehead xml:id="LiabilityLimitation" renderas="sect1">
+ 16. Limitation of Liability.
+ </bridgehead>
+ <para>
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE
+ PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+ OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+ OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+ 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.
+ </para>
+ <bridgehead xml:id="InterpretationSecs1516" renderas="sect1">
+ 17. Interpretation of Sections 15 and 16.
+ </bridgehead>
+ <para>
+ If the disclaimer of warranty and limitation of liability provided above
+ cannot be given local legal effect according to their terms, reviewing
+ courts shall apply local law that most closely approximates an absolute
+ 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.
+ </para>
+ <bridgehead>
+ END OF TERMS AND CONDITIONS
+ </bridgehead>
+ <bridgehead xml:id="HowToApply" renderas="sect1">
+ How to Apply These Terms to Your New Programs
+ </bridgehead>
+ <para>
+ If you develop a new program, and you want it to be of the greatest possible
+ use to the public, the best way to achieve this is to make it free software
+ which everyone can redistribute and change under these terms.
+ </para>
+ <para>
+ To do so, attach the following notices to the program. It is safest to
+ attach them to the start of each source file to most effectively state the
+ exclusion of warranty; and each file should have at least the
+ “copyright” line and a pointer to where the full notice is
+ found.
+ </para>
+ <screen>
+<replaceable>one line to give the program’s name and a brief idea of what it does.</replaceable>
+Copyright (C) <replaceable>year</replaceable> <replaceable>name of author</replaceable>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the <acronym>GNU</acronym> 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
+<acronym>GNU</acronym> General Public License for more details.
+
+You should have received a copy of the <acronym>GNU</acronym> General Public License
+along with this program. If not, see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</link>.
+ </screen>
+ <para>
+ Also add information on how to contact you by electronic and paper mail.
+ </para>
+ <para>
+ If the program does terminal interaction, make it output a short notice like
+ this when it starts in an interactive mode:
+ </para>
+ <screen>
+<replaceable>program</replaceable> Copyright (C) <replaceable>year</replaceable> <replaceable>name of author</replaceable>
+This program comes with ABSOLUTELY NO WARRANTY; for details type ‘<literal>show w</literal>’.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type ‘<literal>show c</literal>’ for details.
+ </screen>
+ <para>
+ The hypothetical commands ‘<literal>show w</literal>’ and
+ ‘<literal>show c</literal>’ should show the appropriate parts of
+ the General Public License. Of course, your program’s commands might be
+ different; for a GUI interface, you would use an “about box”.
+ </para>
+ <para>
+ You should also get your employer (if you work as a programmer) or school,
+ 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>GNU</acronym> <acronym>GPL</acronym>, see
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</link>.
+ </para>
+ <para>
+ The <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>GNU</acronym> Lesser General Public License instead of this
+ License. But first, please read <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</link>.
+ </para>
+</appendix>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.dot b/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.dot
new file mode 100644
index 000000000..047436eef
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.dot
@@ -0,0 +1,16 @@
+# Blatantly ripped out of the graphviz examples and modified. -pme
+digraph v3conf {
+ size="6,6";
+ node [color=lightblue2, style=filled];
+ "aclocal.m4" -> "acinclude.m4";
+ "configure" -> "aclocal.m4";
+ "configure" -> "configure.ac";
+ "configure" -> "crossconfig.m4";
+ "configure" -> "linkage.m4";
+ "[*/]Makefile" -> "[*/]Makefile.in";
+ "[*/]Makefile.in" -> "Makefile.am";
+ "[*/]Makefile.in" -> "configure.ac";
+ "config.h" -> "config.h.in"
+ "config.h.in" -> "acconfig.h";
+ "config.h.in" -> "configure.ac";
+}
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.pdf
new file mode 100644
index 000000000..dab5ef341
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.png
new file mode 100644
index 000000000..55c07ba01
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/confdeps.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_balls_and_bins.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_balls_and_bins.png
new file mode 100644
index 000000000..529c3ae41
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_balls_and_bins.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pdf
new file mode 100644
index 000000000..f5f61f874
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.png
new file mode 100644
index 000000000..601d60fda
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push.svg
new file mode 100644
index 000000000..91c774b69
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pdf
new file mode 100644
index 000000000..acae1fefa
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.png
new file mode 100644
index 000000000..93637b06c
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_binary_priority_queue_int_push_pop.svg
new file mode 100644
index 000000000..37bd874f1
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pdf
new file mode 100644
index 000000000..128ce6635
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.png
new file mode 100644
index 000000000..ee3518799
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_find.svg
new file mode 100644
index 000000000..dfccb84ea
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pdf
new file mode 100644
index 000000000..fed7e33d2
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.png
new file mode 100644
index 000000000..6c66291f5
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_find.svg
new file mode 100644
index 000000000..c0416a69f
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pdf
new file mode 100644
index 000000000..cf926daad
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.png
new file mode 100644
index 000000000..ba8478084
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_cc_hash_int_subscript_insert.svg
new file mode 100644
index 000000000..136c8a72b
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pdf
new file mode 100644
index 000000000..364e30c73
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.png
new file mode 100644
index 000000000..d36c47eb4
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_ccgp_hash_int_subscript_insert.svg
new file mode 100644
index 000000000..62746f904
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pdf
new file mode 100644
index 000000000..b9581c2ab
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.png
new file mode 100644
index 000000000..f827f6e0b
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.svg
new file mode 100644
index 000000000..cedb95511
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.png
new file mode 100644
index 000000000..adee12636
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.png
new file mode 100644
index 000000000..9d84791fc
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.png
new file mode 100644
index 000000000..9470a65b5
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.png
new file mode 100644
index 000000000..d2ac91c1a
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.png
new file mode 100644
index 000000000..08ecb0ffe
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pdf
new file mode 100644
index 000000000..ccc300117
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.png
new file mode 100644
index 000000000..a7c338382
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.svg
new file mode 100644
index 000000000..ac6067ad8
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pdf
new file mode 100644
index 000000000..27ccb3286
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.png
new file mode 100644
index 000000000..66aa0481c
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_find.svg
new file mode 100644
index 000000000..f8dafcfee
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pdf
new file mode 100644
index 000000000..d5911b945
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.png
new file mode 100644
index 000000000..d84733fe0
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_find.svg
new file mode 100644
index 000000000..2f12dabde
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pdf
new file mode 100644
index 000000000..f53522d65
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.png
new file mode 100644
index 000000000..27940fcd8
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_gp_hash_int_subscript_insert.svg
new file mode 100644
index 000000000..c87e21c3b
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pdf
new file mode 100644
index 000000000..d1a4c4fc3
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.png
new file mode 100644
index 000000000..d26ed8fd5
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_int_erase_mem.svg
new file mode 100644
index 000000000..cad68c70e
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.png
new file mode 100644
index 000000000..f3122a112
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.png
new file mode 100644
index 000000000..5c37407dd
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.png
new file mode 100644
index 000000000..87763caac
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.png
new file mode 100644
index 000000000..5e0d7f403
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.pdf
new file mode 100644
index 000000000..b27dd73f1
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.png
new file mode 100644
index 000000000..04c7eebb6
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_text_find.svg
new file mode 100644
index 000000000..92cac1860
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pdf
new file mode 100644
index 000000000..3891834fb
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.png
new file mode 100644
index 000000000..d4dac479c
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_hash_zlob_int_find.svg
new file mode 100644
index 000000000..a62e75de1
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.png
new file mode 100644
index 000000000..f64764ec9
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.png
new file mode 100644
index 000000000..e4645973e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.png
new file mode 100644
index 000000000..5535c5fe6
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.png
new file mode 100644
index 000000000..940a27f71
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pdf
new file mode 100644
index 000000000..39e4e2cb6
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.png
new file mode 100644
index 000000000..570a70da9
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.svg
new file mode 100644
index 000000000..46ebb3da5
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_list_update.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_list_update.png
new file mode 100644
index 000000000..7c96dcaf6
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_list_update.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pdf
new file mode 100644
index 000000000..1eb60d103
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.png
new file mode 100644
index 000000000..cb9000fa4
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_hash.svg
new file mode 100644
index 000000000..b43876cb6
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pdf
new file mode 100644
index 000000000..829364690
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.png
new file mode 100644
index 000000000..12d062dbc
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_large_s2p_tree.svg
new file mode 100644
index 000000000..110da9d7e
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pdf
new file mode 100644
index 000000000..6a849de08
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.png
new file mode 100644
index 000000000..7c387198e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_hash.svg
new file mode 100644
index 000000000..95a78222d
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pdf
new file mode 100644
index 000000000..3acdebf08
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.png
new file mode 100644
index 000000000..2066376ee
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_small_s2p_tree.svg
new file mode 100644
index 000000000..be4f1bfd6
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pdf
new file mode 100644
index 000000000..654787575
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.png
new file mode 100644
index 000000000..09afca29a
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_hash.svg
new file mode 100644
index 000000000..feb54b4e8
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pdf
new file mode 100644
index 000000000..7b3f0afe7
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.png
new file mode 100644
index 000000000..a063d4b09
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_large_s2p_tree.svg
new file mode 100644
index 000000000..fc927db89
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pdf
new file mode 100644
index 000000000..08a1006bd
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.png
new file mode 100644
index 000000000..01b0884c1
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_hash.svg
new file mode 100644
index 000000000..7a4cd0b0c
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pdf
new file mode 100644
index 000000000..59f9e6628
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.png
new file mode 100644
index 000000000..f88c9b9aa
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_large_s2p_tree.svg
new file mode 100644
index 000000000..8786b4244
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pdf
new file mode 100644
index 000000000..41b8bc246
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.png
new file mode 100644
index 000000000..a5c8cf602
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_hash.svg
new file mode 100644
index 000000000..09c3bdd84
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pdf
new file mode 100644
index 000000000..0d0b3ee3a
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.png
new file mode 100644
index 000000000..88b59ae4c
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_small_s2p_tree.svg
new file mode 100644
index 000000000..fb955ca42
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pdf
new file mode 100644
index 000000000..22aca4037
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.png
new file mode 100644
index 000000000..9cf2a8e8d
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_hash.svg
new file mode 100644
index 000000000..6c297f311
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pdf
new file mode 100644
index 000000000..a5a6b41d4
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.png
new file mode 100644
index 000000000..b851d2149
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_small_s2p_tree.svg
new file mode 100644
index 000000000..940e361c7
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_node_invariants.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_node_invariants.png
new file mode 100644
index 000000000..b375f5168
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_node_invariants.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pdf
new file mode 100644
index 000000000..51197d24c
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.png
new file mode 100644
index 000000000..3f56eebb0
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_down_thin.svg
new file mode 100644
index 000000000..a64dd4e38
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pdf
new file mode 100644
index 000000000..31376595d
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.png
new file mode 100644
index 000000000..c647e4f55
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_modify_up_thin.svg
new file mode 100644
index 000000000..be1efba8d
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pdf
new file mode 100644
index 000000000..da403713f
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.png
new file mode 100644
index 000000000..9f7498a5f
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push.svg
new file mode 100644
index 000000000..9d96151b3
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pdf
new file mode 100644
index 000000000..b3db81311
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.png
new file mode 100644
index 000000000..b56a35e17
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pairing_priority_queue_text_push_pop.svg
new file mode 100644
index 000000000..9f18a5b34
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pat_trie.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pat_trie.png
new file mode 100644
index 000000000..e7129a1a6
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_pat_trie.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.png
new file mode 100644
index 000000000..25a69fc6e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.png
new file mode 100644
index 000000000..c5bc8e5d6
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.png
new file mode 100644
index 000000000..c3f94ee93
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.png
new file mode 100644
index 000000000..9d84791fc
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pdf
new file mode 100644
index 000000000..9283106a1
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.png
new file mode 100644
index 000000000..fdc53c762
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push.svg
new file mode 100644
index 000000000..76dd1b6ea
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pdf
new file mode 100644
index 000000000..495036c3f
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.png
new file mode 100644
index 000000000..56c841d5e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_int_push_pop.svg
new file mode 100644
index 000000000..ef5e2edde
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pdf
new file mode 100644
index 000000000..c7ee458b2
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.png
new file mode 100644
index 000000000..3a849d2d7
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.svg
new file mode 100644
index 000000000..678bf93b4
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pdf
new file mode 100644
index 000000000..f16d00884
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.png
new file mode 100644
index 000000000..5c3073d8f
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join.svg
new file mode 100644
index 000000000..5c4679a2e
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pdf
new file mode 100644
index 000000000..29c82ed7f
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.png
new file mode 100644
index 000000000..931812d13
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down.svg
new file mode 100644
index 000000000..ed62f611c
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pdf
new file mode 100644
index 000000000..a1ad5e976
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.png
new file mode 100644
index 000000000..e8e76549e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up.svg
new file mode 100644
index 000000000..35ad3eb14
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pdf
new file mode 100644
index 000000000..a32ebd1d9
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.png
new file mode 100644
index 000000000..741aa8b94
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem.svg
new file mode 100644
index 000000000..86aaff031
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pdf
new file mode 100644
index 000000000..6660c32d8
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.png
new file mode 100644
index 000000000..0107d473e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push.svg
new file mode 100644
index 000000000..a604e0e21
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pdf
new file mode 100644
index 000000000..f871929b9
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.png
new file mode 100644
index 000000000..5da52c3de
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop.svg
new file mode 100644
index 000000000..0a28468cd
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.png
new file mode 100644
index 000000000..438748915
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_resize_policy_cd.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_resize_policy_cd.png
new file mode 100644
index 000000000..338e33c15
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_resize_policy_cd.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.png
new file mode 100644
index 000000000..33ba84bfe
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_simple_list.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_simple_list.png
new file mode 100644
index 000000000..9a05d3f5e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_simple_list.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.pdf
new file mode 100644
index 000000000..988ffaf5e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.png
new file mode 100644
index 000000000..31bd80c5d
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_int_find.svg
new file mode 100644
index 000000000..40f97176d
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.png
new file mode 100644
index 000000000..bbd91842b
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.png
new file mode 100644
index 000000000..b375f5168
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.png
new file mode 100644
index 000000000..5cae5781a
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pdf
new file mode 100644
index 000000000..ddbdc70fd
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.png
new file mode 100644
index 000000000..76177087f
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics.svg
new file mode 100644
index 000000000..eec7c40f4
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.pdf
new file mode 100644
index 000000000..54f688dbb
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.png
new file mode 100644
index 000000000..dcbc2dbe0
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_split_join.svg
new file mode 100644
index 000000000..3a19f76b7
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.pdf
new file mode 100644
index 000000000..57d96c54a
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.png
new file mode 100644
index 000000000..ce4e606f7
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_find.svg
new file mode 100644
index 000000000..da5f7cb6a
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pdf
new file mode 100644
index 000000000..912708c45
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.png
new file mode 100644
index 000000000..4ec35d4b7
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_node.svg
new file mode 100644
index 000000000..0cbf5dfbd
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pdf
new file mode 100644
index 000000000..672504cd0
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.png
new file mode 100644
index 000000000..3420298ce
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_trie.svg
new file mode 100644
index 000000000..a202fb38f
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pdf
new file mode 100644
index 000000000..aceb552da
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.png
new file mode 100644
index 000000000..cdb367ef6
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_vector.svg
new file mode 100644
index 000000000..72e9931d7
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pdf b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pdf
new file mode 100644
index 000000000..01a8f2478
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.pdf
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.png
new file mode 100644
index 000000000..acc4a6f27
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg
new file mode 100644
index 000000000..9c5e44ada
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
new file mode 100644
index 000000000..4376929ec
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
new file mode 100644
index 000000000..880a50edf
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
Binary files differ
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/abi.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/abi.xml
new file mode 100644
index 000000000..3a7a4740b
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/abi.xml
@@ -0,0 +1,1194 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.abi" xreflabel="abi">
+<?dbhtml filename="abi.html"?>
+
+<info><title>ABI Policy and Guidelines</title>
+ <keywordset>
+ <keyword>C++</keyword>
+ <keyword>ABI</keyword>
+ <keyword>version</keyword>
+ <keyword>dynamic</keyword>
+ <keyword>shared</keyword>
+ <keyword>compatibility</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+</para>
+
+<section xml:id="abi.cxx_interface"><info><title>The C++ Interface</title></info>
+
+
+<para>
+ 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.
+</para>
+
+<para>
+ The C++ Standard Library has many include files, types defined in
+ those include files, specific named functions, and other
+ behavior. The text of these behaviors, as written in source include
+ files, is called the Application Programing Interface, or API.
+</para>
+
+<para>
+ Furthermore, C++ source that is compiled into object files is
+ transformed by the compiler: it arranges objects with specific
+ alignment and in a particular layout, mangling names according to a
+ well-defined algorithm, has specific arrangements for the support of
+ 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://mentorembedded.github.com/cxx-abi/abi.html">ABI
+ specification</link>.
+</para>
+
+<para>
+ The GNU C++ compiler, g++, has a compiler command line option to
+ switch between various different C++ ABIs. This explicit version
+ switch is the flag <code>-fabi-version</code>. In addition, some
+ g++ command line options may change the ABI as a side-effect of
+ use. Such flags include <code>-fpack-struct</code> and
+ <code>-fno-exceptions</code>, but include others: see the complete
+ list in the GCC manual under the heading <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options">Options
+ for Code Generation Conventions</link>.
+</para>
+
+<para>
+ The configure options used when building a specific libstdc++
+ version may also impact the resulting library ABI. The available
+ configure options, and their impact on the library ABI, are
+ documented
+<link linkend="manual.intro.setup.configure">here</link>.
+</para>
+
+<para> Putting all of these ideas together results in the C++ Standard
+library ABI, which is the compilation of a given library API by a
+given compiler ABI. In a nutshell:
+</para>
+
+<para>
+ <quote>
+ library API + compiler ABI = library ABI
+ </quote>
+</para>
+
+<para>
+ The library ABI is mostly of interest for end-users who have
+ unresolved symbols and are linking dynamically to the C++ Standard
+ library, and who thus must be careful to compile their application
+ with a compiler that is compatible with the available C++ Standard
+ library binary. In this case, compatible is defined with the equation
+ above: given an application compiled with a given compiler ABI and
+ library API, it will work correctly with a Standard C++ Library
+ created with the same constraints.
+</para>
+
+<para>
+ 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.
+</para>
+
+</section>
+
+<section xml:id="abi.versioning"><info><title>Versioning</title></info>
+
+
+<para> 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.
+</para>
+
+ <section xml:id="abi.versioning.goals"><info><title>Goals</title></info>
+
+
+<para>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
+release of a library binary will still run correctly if the library
+binary is replaced by carefully-managed subsequent library
+binaries. This is called forward compatibility.
+</para>
+<para>
+The reverse (backwards compatibility) is not true. It is not possible
+to take program binaries linked with the latest version of a library
+binary in a release series (with additional symbols added), substitute
+in the initial release of the library binary, and remain link
+compatible.
+</para>
+
+<para>Allows multiple, incompatible ABIs to coexist at the same time.
+</para>
+ </section>
+
+ <section xml:id="abi.versioning.history"><info><title>History</title></info>
+
+
+<para>
+ 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
+ compiled with other (either newer or older) versions of the same GNU
+ tools, specific techniques are used to make managing this complexity
+ easier.
+</para>
+
+<para>
+ The following techniques are used:
+</para>
+
+ <orderedlist>
+
+ <listitem><para>Release versioning on the libgcc_s.so binary. </para>
+
+ <para>This is implemented via file names and the ELF
+ <constant>DT_SONAME</constant> mechanism (at least on ELF
+ systems). It is versioned as follows:
+ </para>
+
+ <itemizedlist>
+ <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, GCC 4.x: libgcc_s.so.1
+ when configuring <code>--with-sjlj-exceptions</code>, or
+ libgcc_s.so.2 </para> </listitem>
+ </itemizedlist>
+
+ <para>For hppa-linux the versions differ as follows: </para>
+
+ <itemizedlist>
+ <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-7]: either libgcc_s.so.3 when configuring
+ <code>--with-sjlj-exceptions</code>) or libgcc_s.so.4
+ </para> </listitem>
+ </itemizedlist>
+
+ </listitem>
+
+ <listitem><para>Symbol versioning on the libgcc_s.so binary.</para>
+
+ <para>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.</para>
+
+ <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 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>
+ <listitem><para>GCC 4.8.0: GCC_4.8.0</para></listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>
+ Release versioning on the libstdc++.so binary, implemented in
+ the same way as the libgcc_s.so binary above. Listed is the
+ filename: <constant>DT_SONAME</constant> can be deduced from
+ the filename by removing the last two period-delimited numbers. For
+ example, filename <filename>libstdc++.so.5.0.4</filename>
+ corresponds to a <constant>DT_SONAME</constant> of
+ <constant>libstdc++.so.5</constant>. Binaries with equivalent
+ <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.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>
+ <listitem><para>GCC 4.8.0: libstdc++.so.6.0.18</para></listitem>
+ <listitem><para>GCC 4.8.3: libstdc++.so.6.0.19</para></listitem>
+ </itemizedlist>
+ <para>
+ Note 1: Error should be libstdc++.so.3.0.3.
+ </para>
+ <para>
+ Note 2: Not strictly required.
+ </para>
+ <para>
+ Note 3: This release (but not previous or subsequent) has one
+ known incompatibility, see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678">33678</link>
+ in the GCC bug database.
+ </para>
+ </listitem>
+
+ <listitem><para>Symbol versioning on the libstdc++.so binary.</para>
+
+ <para>mapfile: libstdc++-v3/config/abi/pre/gnu.ver</para>
+ <para>It is versioned with the following labels and version
+ definitions, where the version definition is the maximum for a
+ particular release. Note, only symbols which are newly introduced
+ 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
+ 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 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>
+ <listitem><para>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</para></listitem>
+ <listitem><para>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</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 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>
+
+ <para>
+ This macro was defined in the file "lang-specs.h" in the gcc/cp directory.
+ Later versions defined it in "c-common.c" in the gcc directory, and from
+ G++ 3.4 it is defined in c-cppbuiltin.c and its value determined by the
+ '-fabi-version' command line option.
+ </para>
+
+ <para>
+ It is versioned as follows, where 'n' is given by '-fabi-version=n':
+ </para>
+ <itemizedlist>
+ <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>
+
+ <listitem>
+ <para>Changes to the default compiler option for
+ <code>-fabi-version</code>.
+ </para>
+ <para>
+ It is versioned as follows:
+ </para>
+ <itemizedlist>
+ <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>
+
+ <listitem>
+ <para>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
+ macro namespace.) These macros are defined as the date the library
+ was released, in compressed ISO date format, as an unsigned long.
+ </para>
+
+ <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
+ 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.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>
+
+ <listitem>
+ <para>
+ 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
+ is called _GLIBCXX_VERSION).
+ </para>
+
+ <para>
+ This macro is defined in the file "c++config" in the
+ "libstdc++-v3/include/bits" directory and is generated
+ automatically by autoconf as part of the configure-time generation
+ of config.h.
+ </para>
+
+ <para>
+ 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: "version-unused"</para></listitem>
+ <listitem><para>GCC 4.x: "version-unused"</para></listitem>
+ </itemizedlist>
+ <para/>
+ </listitem>
+
+ <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
+ and higher.
+ </para>
+ <para>
+ 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).
+ </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.x: include/c++/3.4.x</para></listitem>
+ <listitem><para>GCC 4.x.y: include/c++/4.x.y</para></listitem>
+ </itemizedlist>
+ <para/>
+ </listitem>
+ </orderedlist>
+
+<para>
+ 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.
+</para>
+
+
+ </section>
+
+ <section xml:id="abi.versioning.prereq"><info><title>Prerequisites</title></info>
+
+ <para>
+ 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
+ executable compiled
+ with g++, and shared libraries (libgcc_s, libstdc++) compiled by
+ a compiler (g++) with a compatible ABI. Phew.
+ </para>
+
+ <para>
+ On top of all that, an additional constraint: libstdc++ did not
+ attempt to version symbols (or age gracefully, really) until
+ version 3.1.0.
+ </para>
+
+ <para>
+ 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>
+
+ <section xml:id="abi.versioning.config"><info><title>Configuring</title></info>
+
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ For more information on configure options, including ABI
+ impacts, see:
+ <link linkend="manual.intro.setup.configure">here</link>
+ </para>
+
+ <para>
+ There is one flag that explicitly deals with symbol versioning:
+ --enable-symvers.
+ </para>
+
+ <para>
+ In particular, libstdc++-v3/acinclude.m4 has a macro called
+ GLIBCXX_ENABLE_SYMVERS that defaults to yes (or the argument
+ passed in via --enable-symvers=foo). At that point, the macro
+ attempts to make sure that all the requirement for symbol
+ versioning are in place. For more information, please consult
+ acinclude.m4.
+ </para>
+ </section>
+
+ <section xml:id="abi.versioning.active"><info><title>Checking Active</title></info>
+
+
+ <para>
+ When the GNU C++ library is being built with symbol versioning
+ on, you should see the following at configure time for
+ libstdc++:
+ </para>
+
+<screen>
+<computeroutput>
+ checking versioning on shared library symbols... gnu
+</computeroutput>
+</screen>
+
+<para>
+ or another of the supported styles.
+ If you don't see this line in the configure output, or if this line
+ appears but the last word is 'no', then you are out of luck.
+</para>
+
+<para>
+ If the compiler is pre-installed, a quick way to test is to compile
+ the following (or any) simple C++ file and link it to the shared
+ libstdc++ library:
+</para>
+
+<programlisting>
+#include &lt;iostream&gt;
+
+int main()
+{ std::cout &lt;&lt; "hello" &lt;&lt; std::endl; return 0; }
+
+%g++ hello.cc -o hello.out
+
+%ldd hello.out
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40016000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+
+%nm hello.out
+</programlisting>
+
+<para>
+If you see symbols in the resulting output with "GLIBCXX_3" as part
+of the name, then the executable is versioned. Here's an example:
+</para>
+
+<para>
+ <code>U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4</code>
+</para>
+
+<para>
+On Solaris 2, you can use <code>pvs -r</code> instead:
+</para>
+
+<programlisting>
+%g++ hello.cc -o hello.out
+
+%pvs -r hello.out
+ libstdc++.so.6 (GLIBCXX_3.4, GLIBCXX_3.4.12);
+ libgcc_s.so.1 (GCC_3.0);
+ libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);
+</programlisting>
+
+<para>
+<code>ldd -v</code> works too, but is very verbose.
+</para>
+
+ </section>
+</section>
+
+<section xml:id="abi.changes_allowed"><info><title>Allowed Changes</title></info>
+
+
+<para>
+The following will cause the library minor version number to
+increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
+</para>
+<orderedlist>
+ <listitem><para>Adding an exported global or static data member</para></listitem>
+ <listitem><para>Adding an exported function, static or non-virtual member function</para></listitem>
+ <listitem><para>Adding an exported symbol or symbols by additional instantiations</para></listitem>
+</orderedlist>
+<para>
+Other allowed changes are possible.
+</para>
+
+</section>
+
+<section xml:id="abi.changes_no"><info><title>Prohibited Changes</title></info>
+
+
+<para>
+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".
+</para>
+
+<orderedlist>
+ <listitem><para>Changes in the gcc/g++ compiler ABI</para></listitem>
+<listitem><para>Changing size of an exported symbol</para></listitem>
+<listitem><para>Changing alignment of an exported symbol</para></listitem>
+<listitem><para>Changing the layout of an exported symbol</para></listitem>
+<listitem><para>Changing mangling on an exported symbol</para></listitem>
+<listitem><para>Deleting an exported symbol</para></listitem>
+<listitem><para>Changing the inheritance properties of a type by adding or removing
+ base classes</para></listitem>
+<listitem><para>
+ Changing the size, alignment, or layout of types
+ specified in the C++ standard. These may not necessarily be
+ instantiated or otherwise exported in the library binary, and
+ include all the required locale facets, as well as things like
+ std::basic_streambuf, et al.
+</para></listitem>
+
+<listitem><para> Adding an explicit copy constructor or destructor to a
+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://mentorembedded.github.com/cxx-abi/abi.html#calls">Function
+Calling Conventions and APIs</link>
+ of the C++ ABI documentation for further details.
+</para></listitem>
+
+</orderedlist>
+
+</section>
+
+
+
+<section xml:id="abi.impl"><info><title>Implementation</title></info>
+
+
+<orderedlist>
+ <listitem>
+ <para>
+ Separation of interface and implementation
+ </para>
+ <para>
+ This is accomplished by two techniques that separate the API from
+ the ABI: forcing undefined references to link against a library
+ binary for definitions.
+ </para>
+
+<variablelist>
+ <varlistentry>
+ <term>Include files have declarations, source files have defines</term>
+
+ <listitem>
+ <para>
+ For non-templatized types, such as much of <code>class
+ locale</code>, the appropriate standard C++ include, say
+ <code>locale</code>, can contain full declarations, while
+ various source files (say <code> locale.cc, locale_init.cc,
+ localename.cc</code>) contain definitions.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Extern template on required types</term>
+
+ <listitem>
+ <para>
+ For parts of the standard that have an explicit list of
+ required instantiations, the GNU extension syntax <code> extern
+ template </code> can be used to control where template
+ definitions reside. By marking required instantiations as
+ <code> extern template </code> in include files, and providing
+ explicit instantiations in the appropriate instantiation files,
+ non-inlined template functions can be versioned. This technique
+ is mostly used on parts of the standard that require <code>
+ char</code> and <code> wchar_t</code> instantiations, and
+ includes <code> basic_string</code>, the locale facets, and the
+ types in <code> iostreams</code>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ <para>
+ In addition, these techniques have the additional benefit that they
+ reduce binary size, which can increase runtime performance.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Namespaces linking symbol definitions to export mapfiles
+ </para>
+ <para>
+ All symbols in the shared library binary are processed by a
+ linker script at build time that either allows or disallows
+ external linkage. Because of this, some symbols, regardless of
+ normal C/C++ linkage, are not visible. Symbols that are internal
+ have several appealing characteristics: by not exporting the
+ symbols, there are no relocations when the shared library is
+ started and thus this makes for faster runtime loading
+ performance by the underlying dynamic loading mechanism. In
+ addition, they have the possibility of changing without impacting
+ ABI compatibility.
+ </para>
+
+<para>The following namespaces are transformed by the mapfile:</para>
+
+<variablelist>
+
+ <varlistentry>
+<term><code>namespace std</code></term>
+<listitem><para> Defaults to exporting all symbols in label
+<code>GLIBCXX</code> that do not begin with an underscore, i.e.,
+<code>__test_func</code> would not be exported by default. Select
+exceptional symbols are allowed to be visible.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+<term><code>namespace __gnu_cxx</code></term>
+<listitem><para> Defaults to not exporting any symbols in label
+<code>GLIBCXX</code>, select items are allowed to be visible.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+<term><code>namespace __gnu_internal</code></term>
+<listitem><para> Defaults to not exported, no items are allowed to be visible.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+<term><code>namespace __cxxabiv1</code>, aliased to <code> namespace abi</code></term>
+<listitem><para> Defaults to not exporting any symbols in label
+<code>CXXABI</code>, select items are allowed to be visible.</para></listitem>
+ </varlistentry>
+
+</variablelist>
+<para>
+</para>
+</listitem>
+
+ <listitem><para>Freezing the API</para>
+ <para>Disallowed changes, as above, are not made on a stable release
+branch. Enforcement tends to be less strict with GNU extensions that
+standard includes.</para>
+</listitem>
+</orderedlist>
+
+</section>
+
+<section xml:id="abi.testing"><info><title>Testing</title></info>
+
+
+ <section xml:id="abi.testing.single"><info><title>Single ABI Testing</title></info>
+
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ Testing the C++ compiler ABI can be done various ways.
+ </para>
+
+ <para>
+ One. Intel ABI checker.
+ </para>
+
+<para>
+Two.
+The second is yet unreleased, but has been announced on the gcc
+mailing list. It is yet unspecified if these tools will be freely
+available, and able to be included in a GNU project. Please contact
+Mark Mitchell (mark@codesourcery.com) for more details, and current
+status.
+</para>
+
+<para>
+Three.
+Involves using the vlad.consistency test framework. This has also been
+discussed on the gcc mailing lists.
+</para>
+
+<para>
+Testing the C++ library ABI can also be done various ways.
+</para>
+
+<para>
+One.
+(Brendan Kehoe, Jeff Law suggestion to run 'make check-c++' two ways,
+one with a new compiler and an old library, and the other with an old
+compiler and a new library, and look for testsuite regressions)
+</para>
+
+<para>
+Details on how to set this kind of test up can be found here:
+http://gcc.gnu.org/ml/gcc/2002-08/msg00142.html
+</para>
+
+<para>
+Two.
+Use the 'make check-abi' rule in the libstdc++ Makefile.
+</para>
+
+<para>
+This is a proactive check of the library ABI. Currently, exported symbol
+names that are either weak or defined are checked against a last known
+good baseline. Currently, this baseline is keyed off of 3.4.0
+binaries, as this was the last time the .so number was incremented. In
+addition, all exported names are demangled, and the exported objects
+are checked to make sure they are the same size as the same object in
+the baseline.
+
+Notice that each baseline is relative to a <emphasis>default</emphasis>
+configured library and compiler: in particular, if options such as
+--enable-clocale, or --with-cpu, in case of multilibs, are used at
+configure time, the check may fail, either because of substantive
+differences or because of limitations of the current checking
+machinery.
+</para>
+
+<para>
+This dataset is insufficient, yet a start. Also needed is a
+comprehensive check for all user-visible types part of the standard
+library for sizeof() and alignof() changes.
+</para>
+
+<para>
+Verifying compatible layouts of objects is not even attempted. It
+should be possible to use sizeof, alignof, and offsetof to compute
+offsets for each structure and type in the standard library, saving to
+another datafile. Then, compute this in a similar way for new
+binaries, and look for differences.
+</para>
+
+<para>
+Another approach might be to use the -fdump-class-hierarchy flag to
+get information. However, currently this approach gives insufficient
+data for use in library testing, as class data members, their offsets,
+and other detailed data is not displayed with this flag.
+(See PR g++/7470 on how this was used to find bugs.)
+</para>
+
+<para>
+Perhaps there are other C++ ABI checkers. If so, please notify
+us. We'd like to know about them!
+</para>
+
+ </section>
+ <section xml:id="abi.testing.multi"><info><title>Multiple ABI Testing</title></info>
+
+<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, 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>
+
+<para> As above, libone is constructed as follows: </para>
+<programlisting>
+%$bld/H-x86-gcc-3.4.0/bin/g++ -fPIC -DPIC -c a.cc
+
+%$bld/H-x86-gcc-3.4.0/bin/g++ -shared -Wl,-soname -Wl,libone.so.1 -Wl,-O1 -Wl,-z,defs a.o -o libone.so.1.0.0
+
+%ln -s libone.so.1.0.0 libone.so
+
+%$bld/H-x86-gcc-3.4.0/bin/g++ -c a.cc
+
+%ar cru libone.a a.o
+</programlisting>
+
+<para> And, libtwo is constructed as follows: </para>
+
+<programlisting>
+%$bld/H-x86-gcc-3.3.3/bin/g++ -fPIC -DPIC -c b.cc
+
+%$bld/H-x86-gcc-3.3.3/bin/g++ -shared -Wl,-soname -Wl,libtwo.so.1 -Wl,-O1 -Wl,-z,defs b.o -o libtwo.so.1.0.0
+
+%ln -s libtwo.so.1.0.0 libtwo.so
+
+%$bld/H-x86-gcc-3.3.3/bin/g++ -c b.cc
+
+%ar cru libtwo.a b.o
+</programlisting>
+
+<para> ...with the resulting libraries looking like </para>
+
+<screen>
+<computeroutput>
+%ldd libone.so.1.0.0
+ libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40016000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400fa000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x4011c000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x40125000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+
+%ldd libtwo.so.1.0.0
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x40027000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400e1000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40103000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x4010c000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+</computeroutput>
+</screen>
+
+<para>
+ Then, the "C" compiler is used to compile a source file that uses
+ functions from each library.
+</para>
+<programlisting>
+gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.6
+</programlisting>
+
+<para>
+ Which gives the expected:
+</para>
+
+<screen>
+<computeroutput>
+%ldd a.out
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
+ libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40015000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x400e5000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+</computeroutput>
+</screen>
+
+<para>
+ 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.
+</para>
+ </section>
+</section>
+
+<section xml:id="abi.issues"><info><title>Outstanding Issues</title></info>
+
+
+<para>
+ Some features in the C++ language make versioning especially
+ difficult. In particular, compiler generated constructs such as
+ implicit instantiations for templates, typeinfo information, and
+ virtual tables all may cause ABI leakage across shared library
+ boundaries. Because of this, mixing C++ ABIs is not recommended at
+ this time.
+</para>
+
+<para>
+ For more background on this issue, see these bugzilla entries:
+</para>
+
+<para>
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/PR24660">24660: versioning weak symbols in libstdc++</link>
+</para>
+
+<para>
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/PR19664">19664: libstdc++ headers should have pop/push of the visibility around the declarations</link>
+</para>
+
+</section>
+
+<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>
+ <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
+ </link>
+ </title>
+ </biblioentry>
+
+ <biblioentry>
+ <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)
+ </link>
+ </title>
+ </biblioentry>
+
+
+ <biblioentry>
+ <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)
+ </link>
+ </title>
+ </biblioentry>
+
+ <biblioentry>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.akkadia.org/drepper/dsohowto.pdf">
+ How to Write Shared Libraries
+ </link>
+ </title>
+
+ <author>
+ <personname>
+ <firstname>Ulrich</firstname><surname>Drepper</surname>
+ </personname>
+ </author>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <subtitle>
+ ISO C++ J16/06-0046
+ </subtitle>
+ <author><personname><firstname>Benjamin</firstname><surname>Kosnik</surname></personname></author>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+ <subtitle>
+ ISO C++ J16/06-0083
+ </subtitle>
+ <author><personname><firstname>Benjamin</firstname><surname>Kosnik</surname></personname></author>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <subtitle>
+ SYRCoSE 2009
+ </subtitle>
+ <author><personname><firstname>Pavel</firstname><surname>Shved</surname></personname></author>
+ <author><personname><firstname>Denis</firstname><surname>Silakov</surname></personname></author>
+ </biblioentry>
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/algorithms.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/algorithms.xml
new file mode 100644
index 000000000..e776d6e3e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/algorithms.xml
@@ -0,0 +1,95 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.algorithms" xreflabel="Algorithms">
+<?dbhtml filename="algorithms.html"?>
+
+<info><title>
+ Algorithms
+ <indexterm><primary>Algorithms</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ <keyword>algorithm</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+ 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>
+<orderedlist inheritnum="ignore" continuation="restarts">
+ <listitem>
+ <para>
+ 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
+ iterators.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The algorithms do not (and cannot) affect the container as a
+ whole; only the things between the two iterator endpoints. If
+ you pass a range of iterators only enclosing the middle third of
+ a container, then anything outside that range is inviolate.
+ </para>
+ </listitem>
+</orderedlist>
+<para>
+ Even strings can be fed through the algorithms here, although the
+ string class has specialized versions of many of these functions
+ (for example, <code>string::find()</code>). Most of the examples
+ on this page will use simple arrays of integers as a playground
+ for algorithms, just to keep things simple. The use of
+ <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 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 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,
+ honest!), then the algorithms are a cakewalk.
+</para>
+
+<!-- Sect1 01 : Non Modifying -->
+
+<!-- Sect1 02 : Mutating -->
+<section xml:id="std.algorithms.mutating" xreflabel="Mutating"><info><title>Mutating</title></info>
+
+
+ <section xml:id="algorithms.mutating.swap" xreflabel="swap"><info><title><function>swap</function></title></info>
+
+
+ <section xml:id="algorithms.swap.specializations" xreflabel="Specializations"><info><title>Specializations</title></info>
+
+
+ <para>If you call <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> x.swap(y); </code> instead.
+ </para>
+ <para>This allows member functions of each container class to take over, and
+ containers' swap functions should have O(1) complexity according to
+ the standard. (And while "should" allows implementations to
+ behave otherwise and remain compliant, this implementation does in
+ 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.
+ </para>
+
+ </section>
+ </section>
+</section>
+
+<!-- Sect1 03 : Sorting -->
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/allocator.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/allocator.xml
new file mode 100644
index 000000000..57a7d0379
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/allocator.xml
@@ -0,0 +1,588 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.util.memory.allocator" xreflabel="Allocator">
+<?dbhtml filename="allocator.html"?>
+
+<info><title>Allocators</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>allocator</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+ Memory management for Standard Library entities is encapsulated in a
+ class template called <classname>allocator</classname>. The
+ <classname>allocator</classname> abstraction is used throughout the
+ library in <classname>string</classname>, container classes,
+ algorithms, and parts of iostreams. This class, and base classes of
+ it, are the superset of available free store (<quote>heap</quote>)
+ management classes.
+</para>
+
+<section xml:id="allocator.req"><info><title>Requirements</title></info>
+
+
+ <para>
+ The C++ standard only gives a few directives in this area:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ When you add elements to a container, and the container must
+ allocate more memory to hold them, the container makes the
+ request via its <type>Allocator</type> template
+ parameter, which is usually aliased to
+ <type>allocator_type</type>. This includes adding chars
+ to the string class, which acts as a regular STL container in
+ this respect.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The default <type>Allocator</type> argument of every
+ container-of-T is <classname>allocator&lt;T&gt;</classname>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The interface of the <classname>allocator&lt;T&gt;</classname> class is
+ extremely simple. It has about 20 public declarations (nested
+ typedefs, member functions, etc), but the two which concern us most
+ are:
+ </para>
+ <programlisting>
+ T* allocate (size_type n, const void* hint = 0);
+ void deallocate (T* p, size_type n);
+ </programlisting>
+
+ <para>
+ The <varname>n</varname> arguments in both those
+ functions is a <emphasis>count</emphasis> of the number of
+ <type>T</type>'s to allocate space for, <emphasis>not their
+ total size</emphasis>.
+ (This is a simplification; the real signatures use nested typedefs.)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The storage is obtained by calling <function>::operator
+ new</function>, but it is unspecified when or how
+ often this function is called. The use of the
+ <varname>hint</varname> is unspecified, but intended as an
+ aid to locality if an implementation so
+ desires. <constant>[20.4.1.1]/6</constant>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ Complete details can be found in the C++ standard, look in
+ <constant>[20.4 Memory]</constant>.
+ </para>
+
+</section>
+
+<section xml:id="allocator.design_issues"><info><title>Design Issues</title></info>
+
+
+ <para>
+ The easiest way of fulfilling the requirements is to call
+ <function>operator new</function> each time a container needs
+ memory, and to call <function>operator delete</function> each time
+ the container releases memory. This method may be <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html">slower</link>
+ 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
+ clusters. The <classname>__gnu_cxx::new_allocator</classname>
+ implements the simple operator new and operator delete semantics,
+ while <classname>__gnu_cxx::malloc_allocator</classname>
+ implements much the same thing, only with the C language functions
+ <function>std::malloc</function> and <function>std::free</function>.
+ </para>
+
+ <para>
+ Another approach is to use intelligence within the allocator
+ class to cache allocations. This extra machinery can take a variety
+ of forms: a bitmap index, an index into an exponentially increasing
+ power-of-two-sized buckets, or simpler fixed-size pooling cache.
+ The cache is shared among all the containers in the program: when
+ your program's <classname>std::vector&lt;int&gt;</classname> gets
+ cut in half and frees a bunch of its storage, that memory can be
+ reused by the private
+ <classname>std::list&lt;WonkyWidget&gt;</classname> brought in from
+ a KDE library that you linked against. And operators
+ <function>new</function> and <function>delete</function> are not
+ always called to pass the memory on, either, which is a speed
+ bonus. Examples of allocators that use these techniques are
+ <classname>__gnu_cxx::bitmap_allocator</classname>,
+ <classname>__gnu_cxx::pool_allocator</classname>, and
+ <classname>__gnu_cxx::__mt_alloc</classname>.
+ </para>
+
+ <para>
+ Depending on the implementation techniques used, the underlying
+ operating system, and compilation environment, scaling caching
+ allocators can be tricky. In particular, order-of-destruction and
+ order-of-creation for memory pools may be difficult to pin down
+ with certainty, which may create problems when used with plugins
+ or loading and unloading shared objects in memory. As such, using
+ caching allocators on systems that do not support
+ <function>abi::__cxa_atexit</function> is not recommended.
+ </para>
+
+</section>
+
+<section xml:id="allocator.impl"><info><title>Implementation</title></info>
+
+
+ <section><info><title>Interface Design</title></info>
+
+
+ <para>
+ 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
+ been modified to support this change.
+ </para>
+
+ <para>
+ The class <classname>allocator</classname> just has typedef,
+ constructor, and rebind members. It inherits from one of the
+ high-speed extension allocators, covered below. Thus, all
+ allocation and deallocation depends on the base class.
+ </para>
+
+ <para>
+ The base class that <classname>allocator</classname> is derived from
+ may not be user-configurable.
+</para>
+
+ </section>
+
+ <section><info><title>Selecting Default Allocation Policy</title></info>
+
+
+ <para>
+ 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
+ for speed.
+ </para>
+
+ <para>
+ Three synthetic benchmarks have been created that provide data
+ that is used to compare different C++ allocators. These tests are:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Insertion.
+ </para>
+ <para>
+ Over multiple iterations, various STL container
+ objects have elements inserted to some maximum amount. A variety
+ of allocators are tested.
+ Test source for <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup">sequence</link>
+ and <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup">associative</link>
+ containers.
+ </para>
+
+ </listitem>
+
+ <listitem>
+ <para>
+ Insertion and erasure in a multi-threaded environment.
+ </para>
+ <para>
+ This test shows the ability of the allocator to reclaim memory
+ on a per-thread basis, as well as measuring thread contention
+ for memory resources.
+ Test source
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup">here</link>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A threaded producer/consumer model.
+ </para>
+ <para>
+ Test source for
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup">sequence</link>
+ and
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup">associative</link>
+ containers.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ The current default choice for
+ <classname>allocator</classname> is
+ <classname>__gnu_cxx::new_allocator</classname>.
+ </para>
+
+ </section>
+
+ <section><info><title>Disabling Memory Caching</title></info>
+
+
+ <para>
+ In use, <classname>allocator</classname> may allocate and
+ deallocate using implementation-specific strategies and
+ heuristics. Because of this, a given call to an allocator object's
+ <function>allocate</function> member function may not actually
+ call the global <code>operator new</code> and a given call to
+ to the <function>deallocate</function> member function may not
+ call <code>operator delete</code>.
+ </para>
+
+ <para>
+ This can be confusing.
+ </para>
+
+ <para>
+ In particular, this can make debugging memory errors more
+ difficult, especially when using third-party tools like valgrind or
+ debug versions of <function>new</function>.
+ </para>
+
+ <para>
+ There are various ways to solve this problem. One would be to use
+ a custom allocator that just called operators
+ <function>new</function> and <function>delete</function>
+ directly, for every allocation. (See the default allocator,
+ <filename>include/ext/new_allocator.h</filename>, for instance.)
+ However, that option may involve changing source code to use
+ a non-default allocator. Another option is to force the
+ default allocator to remove caching and pools, and to directly
+ allocate with every call of <function>allocate</function> and
+ directly deallocate with every call of
+ <function>deallocate</function>, regardless of efficiency. As it
+ turns out, this last option is also available.
+ </para>
+
+
+ <para>
+ To globally disable memory caching within the library for some of
+ the optional non-default allocators, merely set
+ <constant>GLIBCXX_FORCE_NEW</constant> (with any value) in the
+ system's environment before running the program. If your program
+ crashes with <constant>GLIBCXX_FORCE_NEW</constant> in the
+ environment, it likely means that you linked against objects
+ built against the older library (objects which might still using the
+ cached allocations...).
+ </para>
+
+ </section>
+
+</section>
+
+<section xml:id="allocator.using"><info><title>Using a Specific Allocator</title></info>
+
+
+ <para>
+ You can specify different memory management schemes on a
+ per-container basis, by overriding the default
+ <type>Allocator</type> template parameter. For example, an easy
+ (but non-portable) method of specifying that only <function>malloc</function> or <function>free</function>
+ should be used instead of the default node allocator is:
+ </para>
+ <programlisting>
+ std::list &lt;int, __gnu_cxx::malloc_allocator&lt;int&gt; &gt; malloc_list;</programlisting>
+ <para>
+ Likewise, a debugging form of whichever allocator is currently in use:
+ </para>
+ <programlisting>
+ std::deque &lt;int, __gnu_cxx::debug_allocator&lt;std::allocator&lt;int&gt; &gt; &gt; debug_deque;
+ </programlisting>
+</section>
+
+<section xml:id="allocator.custom"><info><title>Custom Allocators</title></info>
+
+
+ <para>
+ Writing a portable C++ allocator would dictate that the interface
+ would look much like the one specified for
+ <classname>allocator</classname>. Additional member functions, but
+ not subtractions, would be permissible.
+ </para>
+
+ <para>
+ Probably the best place to start would be to copy one of the
+ extension allocators: say a simple one like
+ <classname>new_allocator</classname>.
+ </para>
+
+</section>
+
+<section xml:id="allocator.ext"><info><title>Extension Allocators</title></info>
+
+
+ <para>
+ 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
+ equivalent. Starting with gcc-3.4, all extension allocators are
+ standard style. Before this point, SGI style was the norm. Because of
+ this, the number of template arguments also changed. Here's a simple
+ chart to track the changes.
+ </para>
+
+ <para>
+ More details on each of these extension allocators follows.
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ <classname>new_allocator</classname>
+ </para>
+ <para>
+ Simply wraps <function>::operator new</function>
+ and <function>::operator delete</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <classname>malloc_allocator</classname>
+ </para>
+ <para>
+ Simply wraps <function>malloc</function> and
+ <function>free</function>. There is also a hook for an
+ out-of-memory handler (for
+ <function>new</function>/<function>delete</function> this is
+ taken care of elsewhere).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <classname>array_allocator</classname>
+ </para>
+ <para>
+ Allows allocations of known and fixed sizes using existing
+ global or external storage allocated via construction of
+ <classname>std::tr1::array</classname> objects. By using this
+ allocator, fixed size containers (including
+ <classname>std::string</classname>) can be used without
+ instances calling <function>::operator new</function> and
+ <function>::operator delete</function>. This capability
+ allows the use of STL abstractions without runtime
+ complications or overhead, even in situations such as program
+ startup. For usage examples, please consult the testsuite.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <classname>debug_allocator</classname>
+ </para>
+ <para>
+ A wrapper around an arbitrary allocator A. It passes on
+ slightly increased size requests to A, and uses the extra
+ memory to store size information. When a pointer is passed
+ to <function>deallocate()</function>, the stored size is
+ checked, and <function>assert()</function> is used to
+ guarantee they match.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <classname>throw_allocator</classname>
+ </para>
+ <para>
+ Includes memory tracking and marking abilities as well as hooks for
+ throwing exceptions at configurable intervals (including random,
+ all, none).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <classname>__pool_alloc</classname>
+ </para>
+ <para>
+ A high-performance, single pool allocator. The reusable
+ memory is shared among identical instantiations of this type.
+ It calls through <function>::operator new</function> to
+ obtain new memory when its lists run out. If a client
+ container requests a block larger than a certain threshold
+ size, then the pool is bypassed, and the allocate/deallocate
+ request is passed to <function>::operator new</function>
+ directly.
+ </para>
+
+ <para>
+ Older versions of this class take a boolean template
+ parameter, called <varname>thr</varname>, and an integer template
+ parameter, called <varname>inst</varname>.
+ </para>
+
+ <para>
+ The <varname>inst</varname> number is used to track additional memory
+ pools. The point of the number is to allow multiple
+ instantiations of the classes without changing the semantics at
+ all. All three of
+ </para>
+
+ <programlisting>
+ typedef __pool_alloc&lt;true,0&gt; normal;
+ typedef __pool_alloc&lt;true,1&gt; private;
+ typedef __pool_alloc&lt;true,42&gt; also_private;
+ </programlisting>
+ <para>
+ behave exactly the same way. However, the memory pool for each type
+ (and remember that different instantiations result in different types)
+ remains separate.
+ </para>
+ <para>
+ The library uses <emphasis>0</emphasis> in all its instantiations. If you
+ wish to keep separate free lists for a particular purpose, use a
+ different number.
+ </para>
+ <para>The <varname>thr</varname> boolean determines whether the
+ pool should be manipulated atomically or not. When
+ <varname>thr</varname> = <constant>true</constant>, the allocator
+ is thread-safe, while <varname>thr</varname> =
+ <constant>false</constant>, is slightly faster but unsafe for
+ multiple threads.
+ </para>
+
+ <para>
+ For thread-enabled configurations, the pool is locked with a
+ single big lock. In some situations, this implementation detail
+ may result in severe performance degradation.
+ </para>
+
+ <para>
+ (Note that the GCC thread abstraction layer allows us to provide
+ safe zero-overhead stubs for the threading routines, if threads
+ were disabled at configuration time.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>__mt_alloc</classname>
+ </para>
+ <para>
+ A high-performance fixed-size allocator with
+ exponentially-increasing allocations. It has its own
+ <link linkend="manual.ext.allocator.mt">chapter</link>
+ in the documentation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>bitmap_allocator</classname>
+ </para>
+ <para>
+ A high-performance allocator that uses a bit-map to keep track
+ of the used and unused memory locations. It has its own
+ <link linkend="manual.ext.allocator.bitmap">chapter</link>
+ in the documentation.
+ </para>
+ </listitem>
+ </orderedlist>
+</section>
+
+
+<bibliography xml:id="allocator.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 14882:1998 Programming languages - C++
+ </citetitle>
+ <abbrev>
+ isoc++_1998
+ </abbrev>
+ <pagenums>20.4 Memory</pagenums>
+ </biblioentry>
+
+ <biblioentry>
+ <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?
+ </link>
+ </title>
+
+ <author><personname><firstname>Matt</firstname><surname>Austern</surname></personname></author>
+ <publisher>
+ <publishername>
+ C/C++ Users Journal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.hoard.org/">
+ The Hoard Memory Allocator
+ </link>
+ </title>
+
+ <author><personname><firstname>Emery</firstname><surname>Berger</surname></personname></author>
+ </biblioentry>
+
+ <biblioentry>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf">
+ Reconsidering Custom Memory Allocation
+ </link>
+ </title>
+
+ <author><personname><firstname>Emery</firstname><surname>Berger</surname></personname></author>
+ <author><personname><firstname>Ben</firstname><surname>Zorn</surname></personname></author>
+ <author><personname><firstname>Kathryn</firstname><surname>McKinley</surname></personname></author>
+ <copyright>
+ <year>2002</year>
+ <holder>OOPSLA</holder>
+ </copyright>
+ </biblioentry>
+
+
+ <biblioentry>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html">
+ Allocator Types
+ </link>
+ </title>
+
+
+ <author><personname><firstname>Klaus</firstname><surname>Kreft</surname></personname></author>
+ <author><personname><firstname>Angelika</firstname><surname>Langer</surname></personname></author>
+ <publisher>
+ <publishername>
+ C/C++ Users Journal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>The C++ Programming Language</citetitle>
+ <author><personname><firstname>Bjarne</firstname><surname>Stroustrup</surname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder/>
+ </copyright>
+ <pagenums>19.4 Allocators</pagenums>
+ <publisher>
+ <publishername>
+ Addison Wesley
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>Yalloc: A Recycling C++ Allocator</citetitle>
+ <author><personname><firstname>Felix</firstname><surname>Yen</surname></personname></author>
+ </biblioentry>
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_contributing.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
new file mode 100644
index 000000000..ab6909302
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
@@ -0,0 +1,1800 @@
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.contrib" xreflabel="Contributing">
+<?dbhtml filename="appendix_contributing.html"?>
+
+<info><title>
+ Contributing
+ <indexterm>
+ <primary>Appendix</primary>
+ <secondary>Contributing</secondary>
+ </indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+ 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:
+</para>
+
+<section xml:id="contrib.list" xreflabel="Contributor Checklist"><info><title>Contributor Checklist</title></info>
+
+
+ <section xml:id="list.reading"><info><title>Reading</title></info>
+
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ 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
+ members. Non-members, or those who have not paid for the
+ privilege of sitting on the committee and sustained their
+ 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
+ <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>
+
+ <listitem>
+ <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>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The newsgroup dedicated to standardization issues is
+ 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
+ Coding Standards</link>, and chuckle when you hit the part
+ about <quote>Using Languages Other Than C</quote>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Be familiar with the extensions that preceded these
+ general GNU rules. These style issues for libstdc++ can be
+ 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 in
+ <link linkend="appendix.porting">Porting and Maintenance</link>.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+ <section xml:id="list.copyright"><info><title>Assignment</title></info>
+
+ <para>
+ 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
+ to fill out appropriate disclaimer forms as well.
+ </para>
+
+ <para>
+ Historically, the libstdc++ assignment form added the following
+ question:
+ </para>
+
+ <para>
+ <quote>
+ Which Belgian comic book character is better, Tintin or Asterix, and
+ why?
+ </quote>
+ </para>
+
+ <para>
+ While not strictly necessary, humoring the maintainers and answering
+ this question would be appreciated.
+ </para>
+
+ <para>
+ For more information about getting a copyright assignment, please see
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/prep/maintain/html_node/Legal-Matters.html">Legal
+ Matters</link>.
+ </para>
+
+ <para>
+ Please contact Benjamin Kosnik at
+ <email>bkoz+assign@redhat.com</email> if you are confused
+ about the assignment or have general licensing questions. When
+ requesting an assignment form from
+ <email>mailto:assign@gnu.org</email>, please cc the libstdc++
+ maintainer above so that progress can be monitored.
+ </para>
+ </section>
+
+ <section xml:id="list.getting"><info><title>Getting Sources</title></info>
+
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/svnwrite.html">Getting write access
+ (look for "Write after approval")</link>
+ </para>
+ </section>
+
+ <section xml:id="list.patches"><info><title>Submitting Patches</title></info>
+
+
+ <para>
+ 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:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ A description of the bug and how your patch fixes this
+ bug. For new features a description of the feature and your
+ implementation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A ChangeLog entry as plain text; see the various
+ ChangeLog files for format and content. If you are
+ using emacs as your editor, simply position the insertion
+ point at the beginning of your change and hit CX-4a to bring
+ up the appropriate ChangeLog entry. See--magic! Similar
+ functionality also exists for vi.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A testsuite submission or sample program that will
+ easily and simply show the existing error or test new
+ functionality.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The patch itself. If you are accessing the SVN
+ repository use <command>svn update; svn diff NEW</command>;
+ else, use <command>diff -cp OLD NEW</command> ... If your
+ version of diff does not support these options, then get the
+ latest version of GNU
+ diff. The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/wiki/SvnTricks">SVN
+ Tricks</link> wiki page has information on customising the
+ output of <code>svn diff</code>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ When you have all these pieces, bundle them up in a
+ mail message and send it to libstdc++@gcc.gnu.org. All
+ patches and related discussion should be sent to the
+ libstdc++ mailing list.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+</section>
+
+<section xml:id="contrib.organization" xreflabel="Source Organization"><info><title>Directory Layout and Source Conventions</title></info>
+ <?dbhtml filename="source_organization.html"?>
+
+
+ <para>
+ The unpacked source directory of libstdc++ contains the files
+ needed to create the GNU C++ Library.
+ </para>
+
+ <literallayout class="normal">
+It has subdirectories:
+
+ doc
+ Files in HTML and text format that document usage, quirks of the
+ implementation, and contributor checklists.
+
+ include
+ All header files for the C++ library are within this directory,
+ modulo specific runtime-related files that are in the libsupc++
+ directory.
+
+ include/std
+ Files meant to be found by #include &lt;name&gt; directives in
+ standard-conforming user programs.
+
+ include/c
+ Headers intended to directly include standard C headers.
+ [NB: this can be enabled via --enable-cheaders=c]
+
+ include/c_global
+ Headers intended to include standard C headers in
+ the global namespace, and put select names into the std::
+ namespace. [NB: this is the default, and is the same as
+ --enable-cheaders=c_global]
+
+ include/c_std
+ Headers intended to include standard C headers
+ already in namespace std, and put select names into the std::
+ namespace. [NB: this is the same as --enable-cheaders=c_std]
+
+ include/bits
+ Files included by standard headers and by other files in
+ the bits directory.
+
+ include/backward
+ Headers provided for backward compatibility, such as &lt;iostream.h&gt;.
+ They are not used in this library.
+
+ include/ext
+ Headers that define extensions to the standard library. No
+ standard header refers to any of them.
+
+ scripts
+ Scripts that are used during the configure, build, make, or test
+ process.
+
+ src
+ Files that are used in constructing the library, but are not
+ installed.
+
+ 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
+ command is issued from the build directory. Please note that
+ "make check" requires DejaGNU 1.4 or later to be installed. Please
+ note that "make check-script" calls the script mkcheck, which
+ requires bash, and which may need the paths to bash adjusted to
+ work properly, as /bin/bash is assumed.
+
+Other subdirectories contain variant versions of certain files
+that are meant to be copied or linked by the configure script.
+Currently these are:
+
+ config/abi
+ config/cpu
+ config/io
+ config/locale
+ config/os
+
+In addition, a subdirectory holds the convenience library libsupc++.
+
+ libsupc++
+ Contains the runtime library for C++, including exception
+ handling and memory allocation and deallocation, RTTI, terminate
+ handlers, etc.
+
+Note that glibc also has a bits/ subdirectory. We will either
+need to be careful not to collide with names in its bits/
+directory; or rename bits to (e.g.) cppbits/.
+
+In files throughout the system, lines marked with an "XXX" indicate
+a bug or incompletely-implemented feature. Lines marked "XXX MT"
+indicate a place that may require attention for multi-thread safety.
+ </literallayout>
+
+</section>
+
+<section xml:id="contrib.coding_style" xreflabel="Coding Style"><info><title>Coding Style</title></info>
+ <?dbhtml filename="source_code_style.html"?>
+
+ <para>
+ </para>
+ <section xml:id="coding_style.bad_identifiers"><info><title>Bad Identifiers</title></info>
+
+ <para>
+ Identifiers that conflict and should be avoided.
+ </para>
+
+ <literallayout class="normal">
+ This is the list of names <quote>reserved to the
+ implementation</quote> that have been claimed by certain
+ compilers and system headers of interest, and should not be used
+ in the library. It will grow, of course. We generally are
+ interested in names that are not all-caps, except for those like
+ "_T"
+
+ For Solaris:
+ _B
+ _C
+ _L
+ _N
+ _P
+ _S
+ _U
+ _X
+ _E1
+ ..
+ _E24
+
+ Irix adds:
+ _A
+ _G
+
+ MS adds:
+ _T
+
+ BSD adds:
+ __used
+ __unused
+ __inline
+ _Complex
+ __istype
+ __maskrune
+ __tolower
+ __toupper
+ __wchar_t
+ __wint_t
+ _res
+ _res_ext
+ __tg_*
+
+ SPU adds:
+ __ea
+
+ For GCC:
+
+ [Note that this list is out of date. It applies to the old
+ name-mangling; in G++ 3.0 and higher a different name-mangling is
+ used. In addition, many of the bugs relating to G++ interpreting
+ these names as operators have been fixed.]
+
+ The full set of __* identifiers (combined from gcc/cp/lex.c and
+ gcc/cplus-dem.c) that are either old or new, but are definitely
+ recognized by the demangler, is:
+
+ __aa
+ __aad
+ __ad
+ __addr
+ __adv
+ __aer
+ __als
+ __alshift
+ __amd
+ __ami
+ __aml
+ __amu
+ __aor
+ __apl
+ __array
+ __ars
+ __arshift
+ __as
+ __bit_and
+ __bit_ior
+ __bit_not
+ __bit_xor
+ __call
+ __cl
+ __cm
+ __cn
+ __co
+ __component
+ __compound
+ __cond
+ __convert
+ __delete
+ __dl
+ __dv
+ __eq
+ __er
+ __ge
+ __gt
+ __indirect
+ __le
+ __ls
+ __lt
+ __max
+ __md
+ __method_call
+ __mi
+ __min
+ __minus
+ __ml
+ __mm
+ __mn
+ __mult
+ __mx
+ __ne
+ __negate
+ __new
+ __nop
+ __nt
+ __nw
+ __oo
+ __op
+ __or
+ __pl
+ __plus
+ __postdecrement
+ __postincrement
+ __pp
+ __pt
+ __rf
+ __rm
+ __rs
+ __sz
+ __trunc_div
+ __trunc_mod
+ __truth_andif
+ __truth_not
+ __truth_orif
+ __vc
+ __vd
+ __vn
+
+ SGI badnames:
+ __builtin_alloca
+ __builtin_fsqrt
+ __builtin_sqrt
+ __builtin_fabs
+ __builtin_dabs
+ __builtin_cast_f2i
+ __builtin_cast_i2f
+ __builtin_cast_d2ll
+ __builtin_cast_ll2d
+ __builtin_copy_dhi2i
+ __builtin_copy_i2dhi
+ __builtin_copy_dlo2i
+ __builtin_copy_i2dlo
+ __add_and_fetch
+ __sub_and_fetch
+ __or_and_fetch
+ __xor_and_fetch
+ __and_and_fetch
+ __nand_and_fetch
+ __mpy_and_fetch
+ __min_and_fetch
+ __max_and_fetch
+ __fetch_and_add
+ __fetch_and_sub
+ __fetch_and_or
+ __fetch_and_xor
+ __fetch_and_and
+ __fetch_and_nand
+ __fetch_and_mpy
+ __fetch_and_min
+ __fetch_and_max
+ __lock_test_and_set
+ __lock_release
+ __lock_acquire
+ __compare_and_swap
+ __synchronize
+ __high_multiply
+ __unix
+ __sgi
+ __linux__
+ __i386__
+ __i486__
+ __cplusplus
+ __embedded_cplusplus
+ // long double conversion members mangled as __opr
+ // http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html
+ __opr
+ </literallayout>
+ </section>
+
+ <section xml:id="coding_style.example"><info><title>By Example</title></info>
+
+ <literallayout class="normal">
+ This library is written to appropriate C++ coding standards. As such,
+ it is intended to precede the recommendations of the GNU Coding
+ Standard, which can be referenced in full here:
+
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/prep/standards/standards.html#Formatting">http://www.gnu.org/prep/standards/standards.html#Formatting</link>
+
+ The rest of this is also interesting reading, but skip the "Design
+ Advice" part.
+
+ The GCC coding conventions are here, and are also useful:
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/codingconventions.html">http://gcc.gnu.org/codingconventions.html</link>
+
+ In addition, because it doesn't seem to be stated explicitly anywhere
+ else, there is an 80 column source limit.
+
+ <filename>ChangeLog</filename> entries for member functions should use the
+ classname::member function name syntax as follows:
+
+<code>
+1999-04-15 Dennis Ritchie &lt;dr@att.com&gt;
+
+ * src/basic_file.cc (__basic_file::open): Fix thinko in
+ _G_HAVE_IO_FILE_OPEN bits.
+</code>
+
+ Notable areas of divergence from what may be previous local practice
+ (particularly for GNU C) include:
+
+ 01. Pointers and references
+ <code>
+ char* p = "flop";
+ char&amp; c = *p;
+ -NOT-
+ char *p = "flop"; // wrong
+ char &amp;c = *p; // wrong
+ </code>
+
+ Reason: In C++, definitions are mixed with executable code. Here,
+ <code>p</code> is being initialized, not <code>*p</code>. This is near-universal
+ practice among C++ programmers; it is normal for C hackers
+ to switch spontaneously as they gain experience.
+
+ 02. Operator names and parentheses
+ <code>
+ operator==(type)
+ -NOT-
+ operator == (type) // wrong
+ </code>
+
+ Reason: The <code>==</code> is part of the function name. Separating
+ it makes the declaration look like an expression.
+
+ 03. Function names and parentheses
+ <code>
+ void mangle()
+ -NOT-
+ void mangle () // wrong
+ </code>
+
+ Reason: no space before parentheses (except after a control-flow
+ keyword) is near-universal practice for C++. It identifies the
+ parentheses as the function-call operator or declarator, as
+ opposed to an expression or other overloaded use of parentheses.
+
+ 04. Template function indentation
+ <code>
+ template&lt;typename T&gt;
+ void
+ template_function(args)
+ { }
+ -NOT-
+ template&lt;class T&gt;
+ void template_function(args) {};
+ </code>
+
+ Reason: In class definitions, without indentation whitespace is
+ needed both above and below the declaration to distinguish
+ it visually from other members. (Also, re: "typename"
+ rather than "class".) <code>T</code> often could be <code>int</code>, which is
+ not a class. ("class", here, is an anachronism.)
+
+ 05. Template class indentation
+ <code>
+ template&lt;typename _CharT, typename _Traits&gt;
+ class basic_ios : public ios_base
+ {
+ public:
+ // Types:
+ };
+ -NOT-
+ template&lt;class _CharT, class _Traits&gt;
+ class basic_ios : public ios_base
+ {
+ public:
+ // Types:
+ };
+ -NOT-
+ template&lt;class _CharT, class _Traits&gt;
+ class basic_ios : public ios_base
+ {
+ public:
+ // Types:
+ };
+ </code>
+
+ 06. Enumerators
+ <code>
+ enum
+ {
+ space = _ISspace,
+ print = _ISprint,
+ cntrl = _IScntrl
+ };
+ -NOT-
+ enum { space = _ISspace, print = _ISprint, cntrl = _IScntrl };
+ </code>
+
+ 07. Member initialization lists
+ All one line, separate from class name.
+
+ <code>
+ gribble::gribble()
+ : _M_private_data(0), _M_more_stuff(0), _M_helper(0)
+ { }
+ -NOT-
+ gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0)
+ { }
+ </code>
+
+ 08. Try/Catch blocks
+ <code>
+ try
+ {
+ //
+ }
+ catch (...)
+ {
+ //
+ }
+ -NOT-
+ try {
+ //
+ } catch(...) {
+ //
+ }
+ </code>
+
+ 09. Member functions declarations and definitions
+ Keywords such as extern, static, export, explicit, inline, etc
+ go on the line above the function name. Thus
+
+ <code>
+ virtual int
+ foo()
+ -NOT-
+ virtual int foo()
+ </code>
+
+ Reason: GNU coding conventions dictate return types for functions
+ are on a separate line than the function name and parameter list
+ for definitions. For C++, where we have member functions that can
+ be either inline definitions or declarations, keeping to this
+ standard allows all member function names for a given class to be
+ aligned to the same margin, increasing readability.
+
+
+ 10. Invocation of member functions with "this-&gt;"
+ For non-uglified names, use <code>this-&gt;name</code> to call the function.
+
+ <code>
+ this-&gt;sync()
+ -NOT-
+ sync()
+ </code>
+
+ Reason: Koenig lookup.
+
+ 11. Namespaces
+ <code>
+ namespace std
+ {
+ blah blah blah;
+ } // namespace std
+
+ -NOT-
+
+ namespace std {
+ blah blah blah;
+ } // namespace std
+ </code>
+
+ 12. Spacing under protected and private in class declarations:
+ space above, none below
+ i.e.
+
+ <code>
+ public:
+ int foo;
+
+ -NOT-
+ public:
+
+ int foo;
+ </code>
+
+ 13. Spacing WRT return statements.
+ no extra spacing before returns, no parenthesis
+ i.e.
+
+ <code>
+ }
+ return __ret;
+
+ -NOT-
+ }
+
+ return __ret;
+
+ -NOT-
+
+ }
+ return (__ret);
+ </code>
+
+
+ 14. Location of global variables.
+ All global variables of class type, whether in the "user visible"
+ space (e.g., <code>cin</code>) or the implementation namespace, must be defined
+ as a character array with the appropriate alignment and then later
+ re-initialized to the correct value.
+
+ This is due to startup issues on certain platforms, such as AIX.
+ For more explanation and examples, see <filename>src/globals.cc</filename>. All such
+ variables should be contained in that file, for simplicity.
+
+ 15. Exception abstractions
+ Use the exception abstractions found in <filename class="headerfile">functexcept.h</filename>, which allow
+ C++ programmers to use this library with <literal>-fno-exceptions</literal>. (Even if
+ that is rarely advisable, it's a necessary evil for backwards
+ compatibility.)
+
+ 16. Exception error messages
+ All start with the name of the function where the exception is
+ thrown, and then (optional) descriptive text is added. Example:
+
+ <code>
+ __throw_logic_error(__N("basic_string::_S_construct NULL not valid"));
+ </code>
+
+ Reason: The verbose terminate handler prints out <code>exception::what()</code>,
+ as well as the typeinfo for the thrown exception. As this is the
+ default terminate handler, by putting location info into the
+ exception string, a very useful error message is printed out for
+ uncaught exceptions. So useful, in fact, that non-programmers can
+ give useful error messages, and programmers can intelligently
+ speculate what went wrong without even using a debugger.
+
+ 17. The doxygen style guide to comments is a separate document,
+ see index.
+
+ The library currently has a mixture of GNU-C and modern C++ coding
+ styles. The GNU C usages will be combed out gradually.
+
+ Name patterns:
+
+ For nonstandard names appearing in Standard headers, we are constrained
+ to use names that begin with underscores. This is called "uglification".
+ The convention is:
+
+ Local and argument names: <literal>__[a-z].*</literal>
+
+ Examples: <code>__count __ix __s1</code>
+
+ Type names and template formal-argument names: <literal>_[A-Z][^_].*</literal>
+
+ Examples: <code>_Helper _CharT _N</code>
+
+ Member data and function names: <literal>_M_.*</literal>
+
+ Examples: <code>_M_num_elements _M_initialize ()</code>
+
+ Static data members, constants, and enumerations: <literal>_S_.*</literal>
+
+ Examples: <code>_S_max_elements _S_default_value</code>
+
+ Don't use names in the same scope that differ only in the prefix,
+ e.g. _S_top and _M_top. See BADNAMES for a list of forbidden names.
+ (The most tempting of these seem to be and "_T" and "__sz".)
+
+ Names must never have "__" internally; it would confuse name
+ unmanglers on some targets. Also, never use "__[0-9]", same reason.
+
+ --------------------------
+
+ [BY EXAMPLE]
+ <code>
+
+ #ifndef _HEADER_
+ #define _HEADER_ 1
+
+ namespace std
+ {
+ class gribble
+ {
+ public:
+ gribble() throw();
+
+ gribble(const gribble&amp;);
+
+ explicit
+ gribble(int __howmany);
+
+ gribble&amp;
+ operator=(const gribble&amp;);
+
+ virtual
+ ~gribble() throw ();
+
+ // Start with a capital letter, end with a period.
+ inline void
+ public_member(const char* __arg) const;
+
+ // In-class function definitions should be restricted to one-liners.
+ int
+ one_line() { return 0 }
+
+ int
+ two_lines(const char* arg)
+ { return strchr(arg, 'a'); }
+
+ inline int
+ three_lines(); // inline, but defined below.
+
+ // Note indentation.
+ template&lt;typename _Formal_argument&gt;
+ void
+ public_template() const throw();
+
+ template&lt;typename _Iterator&gt;
+ void
+ other_template();
+
+ private:
+ class _Helper;
+
+ int _M_private_data;
+ int _M_more_stuff;
+ _Helper* _M_helper;
+ int _M_private_function();
+
+ enum _Enum
+ {
+ _S_one,
+ _S_two
+ };
+
+ static void
+ _S_initialize_library();
+ };
+
+ // More-or-less-standard language features described by lack, not presence.
+ # ifndef _G_NO_LONGLONG
+ extern long long _G_global_with_a_good_long_name; // avoid globals!
+ # endif
+
+ // Avoid in-class inline definitions, define separately;
+ // likewise for member class definitions:
+ inline int
+ gribble::public_member() const
+ { int __local = 0; return __local; }
+
+ class gribble::_Helper
+ {
+ int _M_stuff;
+
+ friend class gribble;
+ };
+ }
+
+ // Names beginning with "__": only for arguments and
+ // local variables; never use "__" in a type name, or
+ // within any name; never use "__[0-9]".
+
+ #endif /* _HEADER_ */
+
+
+ namespace std
+ {
+ template&lt;typename T&gt; // notice: "typename", not "class", no space
+ long_return_value_type&lt;with_many, args&gt;
+ function_name(char* pointer, // "char *pointer" is wrong.
+ char* argument,
+ const Reference&amp; ref)
+ {
+ // int a_local; /* wrong; see below. */
+ if (test)
+ {
+ nested code
+ }
+
+ int a_local = 0; // declare variable at first use.
+
+ // char a, b, *p; /* wrong */
+ char a = 'a';
+ char b = a + 1;
+ char* c = "abc"; // each variable goes on its own line, always.
+
+ // except maybe here...
+ for (unsigned i = 0, mask = 1; mask; ++i, mask &lt;&lt;= 1) {
+ // ...
+ }
+ }
+
+ gribble::gribble()
+ : _M_private_data(0), _M_more_stuff(0), _M_helper(0)
+ { }
+
+ int
+ gribble::three_lines()
+ {
+ // doesn't fit in one line.
+ }
+ } // namespace std
+ </code>
+ </literallayout>
+ </section>
+</section>
+
+<section xml:id="contrib.design_notes" xreflabel="Design Notes"><info><title>Design Notes</title></info>
+ <?dbhtml filename="source_design_notes.html"?>
+
+ <para>
+ </para>
+
+ <literallayout class="normal">
+
+ The Library
+ -----------
+
+ This paper is covers two major areas:
+
+ - Features and policies not mentioned in the standard that
+ the quality of the library implementation depends on, including
+ extensions and "implementation-defined" features;
+
+ - Plans for required but unimplemented library features and
+ optimizations to them.
+
+ Overhead
+ --------
+
+ The standard defines a large library, much larger than the standard
+ C library. A naive implementation would suffer substantial overhead
+ in compile time, executable size, and speed, rendering it unusable
+ in many (particularly embedded) applications. The alternative demands
+ care in construction, and some compiler support, but there is no
+ need for library subsets.
+
+ What are the sources of this overhead? There are four main causes:
+
+ - The library is specified almost entirely as templates, which
+ with current compilers must be included in-line, resulting in
+ very slow builds as tens or hundreds of thousands of lines
+ of function definitions are read for each user source file.
+ Indeed, the entire SGI STL, as well as the dos Reis valarray,
+ are provided purely as header files, largely for simplicity in
+ porting. Iostream/locale is (or will be) as large again.
+
+ - The library is very flexible, specifying a multitude of hooks
+ where users can insert their own code in place of defaults.
+ When these hooks are not used, any time and code expended to
+ support that flexibility is wasted.
+
+ - Templates are often described as causing to "code bloat". In
+ practice, this refers (when it refers to anything real) to several
+ independent processes. First, when a class template is manually
+ instantiated in its entirely, current compilers place the definitions
+ for all members in a single object file, so that a program linking
+ to one member gets definitions of all. Second, template functions
+ which do not actually depend on the template argument are, under
+ current compilers, generated anew for each instantiation, rather
+ than being shared with other instantiations. Third, some of the
+ flexibility mentioned above comes from virtual functions (both in
+ regular classes and template classes) which current linkers add
+ to the executable file even when they manifestly cannot be called.
+
+ - The library is specified to use a language feature, exceptions,
+ which in the current gcc compiler ABI imposes a run time and
+ code space cost to handle the possibility of exceptions even when
+ they are not used. Under the new ABI (accessed with -fnew-abi),
+ there is a space overhead and a small reduction in code efficiency
+ resulting from lost optimization opportunities associated with
+ non-local branches associated with exceptions.
+
+ What can be done to eliminate this overhead? A variety of coding
+ techniques, and compiler, linker and library improvements and
+ extensions may be used, as covered below. Most are not difficult,
+ and some are already implemented in varying degrees.
+
+ Overhead: Compilation Time
+ --------------------------
+
+ Providing "ready-instantiated" template code in object code archives
+ allows us to avoid generating and optimizing template instantiations
+ in each compilation unit which uses them. However, the number of such
+ instantiations that are useful to provide is limited, and anyway this
+ is not enough, by itself, to minimize compilation time. In particular,
+ it does not reduce time spent parsing conforming headers.
+
+ Quicker header parsing will depend on library extensions and compiler
+ improvements. One approach is some variation on the techniques
+ previously marketed as "pre-compiled headers", now standardized as
+ support for the "export" keyword. "Exported" template definitions
+ can be placed (once) in a "repository" -- really just a library, but
+ of template definitions rather than object code -- to be drawn upon
+ at link time when an instantiation is needed, rather than placed in
+ header files to be parsed along with every compilation unit.
+
+ Until "export" is implemented we can put some of the lengthy template
+ definitions in #if guards or alternative headers so that users can skip
+ over the full definitions when they need only the ready-instantiated
+ specializations.
+
+ To be precise, this means that certain headers which define
+ templates which users normally use only for certain arguments
+ can be instrumented to avoid exposing the template definitions
+ to the compiler unless a macro is defined. For example, in
+ &lt;string&gt;, we might have:
+
+ template &lt;class _CharT, ... &gt; class basic_string {
+ ... // member declarations
+ };
+ ... // operator declarations
+
+ #ifdef _STRICT_ISO_
+ # if _G_NO_TEMPLATE_EXPORT
+ # include &lt;bits/std_locale.h&gt; // headers needed by definitions
+ # ...
+ # include &lt;bits/string.tcc&gt; // member and global template definitions.
+ # endif
+ #endif
+
+ Users who compile without specifying a strict-ISO-conforming flag
+ would not see many of the template definitions they now see, and rely
+ instead on ready-instantiated specializations in the library. This
+ technique would be useful for the following substantial components:
+ string, locale/iostreams, valarray. It would *not* be useful or
+ usable with the following: containers, algorithms, iterators,
+ allocator. Since these constitute a large (though decreasing)
+ fraction of the library, the benefit the technique offers is
+ limited.
+
+ The language specifies the semantics of the "export" keyword, but
+ the gcc compiler does not yet support it. When it does, problems
+ with large template inclusions can largely disappear, given some
+ minor library reorganization, along with the need for the apparatus
+ described above.
+
+ Overhead: Flexibility Cost
+ --------------------------
+
+ The library offers many places where users can specify operations
+ to be performed by the library in place of defaults. Sometimes
+ this seems to require that the library use a more-roundabout, and
+ possibly slower, way to accomplish the default requirements than
+ would be used otherwise.
+
+ The primary protection against this overhead is thorough compiler
+ optimization, to crush out layers of inline function interfaces.
+ Kuck &amp; Associates has demonstrated the practicality of this kind
+ of optimization.
+
+ The second line of defense against this overhead is explicit
+ specialization. By defining helper function templates, and writing
+ specialized code for the default case, overhead can be eliminated
+ for that case without sacrificing flexibility. This takes full
+ advantage of any ability of the optimizer to crush out degenerate
+ code.
+
+ The library specifies many virtual functions which current linkers
+ load even when they cannot be called. Some minor improvements to the
+ compiler and to ld would eliminate any such overhead by simply
+ omitting virtual functions that the complete program does not call.
+ A prototype of this work has already been done. For targets where
+ GNU ld is not used, a "pre-linker" could do the same job.
+
+ The main areas in the standard interface where user flexibility
+ can result in overhead are:
+
+ - Allocators: Containers are specified to use user-definable
+ allocator types and objects, making tuning for the container
+ characteristics tricky.
+
+ - Locales: the standard specifies locale objects used to implement
+ iostream operations, involving many virtual functions which use
+ streambuf iterators.
+
+ - Algorithms and containers: these may be instantiated on any type,
+ frequently duplicating code for identical operations.
+
+ - Iostreams and strings: users are permitted to use these on their
+ own types, and specify the operations the stream must use on these
+ types.
+
+ Note that these sources of overhead are _avoidable_. The techniques
+ to avoid them are covered below.
+
+ Code Bloat
+ ----------
+
+ In the SGI STL, and in some other headers, many of the templates
+ are defined "inline" -- either explicitly or by their placement
+ in class definitions -- which should not be inline. This is a
+ source of code bloat. Matt had remarked that he was relying on
+ the compiler to recognize what was too big to benefit from inlining,
+ and generate it out-of-line automatically. However, this also can
+ result in code bloat except where the linker can eliminate the extra
+ copies.
+
+ Fixing these cases will require an audit of all inline functions
+ defined in the library to determine which merit inlining, and moving
+ the rest out of line. This is an issue mainly in chapters 23, 25, and
+ 27. Of course it can be done incrementally, and we should generally
+ accept patches that move large functions out of line and into ".tcc"
+ files, which can later be pulled into a repository. Compiler/linker
+ improvements to recognize very large inline functions and move them
+ out-of-line, but shared among compilation units, could make this
+ work unnecessary.
+
+ Pre-instantiating template specializations currently produces large
+ amounts of dead code which bloats statically linked programs. The
+ current state of the static library, libstdc++.a, is intolerable on
+ this account, and will fuel further confused speculation about a need
+ for a library "subset". A compiler improvement that treats each
+ instantiated function as a separate object file, for linking purposes,
+ would be one solution to this problem. An alternative would be to
+ split up the manual instantiation files into dozens upon dozens of
+ little files, each compiled separately, but an abortive attempt at
+ this was done for &lt;string&gt; and, though it is far from complete, it
+ is already a nuisance. A better interim solution (just until we have
+ "export") is badly needed.
+
+ When building a shared library, the current compiler/linker cannot
+ automatically generate the instantiations needed. This creates a
+ miserable situation; it means any time something is changed in the
+ library, before a shared library can be built someone must manually
+ copy the declarations of all templates that are needed by other parts
+ of the library to an "instantiation" file, and add it to the build
+ system to be compiled and linked to the library. This process is
+ readily automated, and should be automated as soon as possible.
+ Users building their own shared libraries experience identical
+ frustrations.
+
+ Sharing common aspects of template definitions among instantiations
+ can radically reduce code bloat. The compiler could help a great
+ deal here by recognizing when a function depends on nothing about
+ a template parameter, or only on its size, and giving the resulting
+ function a link-name "equate" that allows it to be shared with other
+ instantiations. Implementation code could take advantage of the
+ capability by factoring out code that does not depend on the template
+ argument into separate functions to be merged by the compiler.
+
+ Until such a compiler optimization is implemented, much can be done
+ manually (if tediously) in this direction. One such optimization is
+ to derive class templates from non-template classes, and move as much
+ implementation as possible into the base class. Another is to partial-
+ specialize certain common instantiations, such as vector&lt;T*&gt;, to share
+ code for instantiations on all types T. While these techniques work,
+ they are far from the complete solution that a compiler improvement
+ would afford.
+
+ Overhead: Expensive Language Features
+ -------------------------------------
+
+ The main "expensive" language feature used in the standard library
+ is exception support, which requires compiling in cleanup code with
+ static table data to locate it, and linking in library code to use
+ the table. For small embedded programs the amount of such library
+ code and table data is assumed by some to be excessive. Under the
+ "new" ABI this perception is generally exaggerated, although in some
+ cases it may actually be excessive.
+
+ To implement a library which does not use exceptions directly is
+ not difficult given minor compiler support (to "turn off" exceptions
+ and ignore exception constructs), and results in no great library
+ maintenance difficulties. To be precise, given "-fno-exceptions",
+ the compiler should treat "try" blocks as ordinary blocks, and
+ "catch" blocks as dead code to ignore or eliminate. Compiler
+ support is not strictly necessary, except in the case of "function
+ try blocks"; otherwise the following macros almost suffice:
+
+ #define throw(X)
+ #define try if (true)
+ #define catch(X) else if (false)
+
+ However, there may be a need to use function try blocks in the
+ library implementation, and use of macros in this way can make
+ correct diagnostics impossible. Furthermore, use of this scheme
+ would require the library to call a function to re-throw exceptions
+ from a try block. Implementing the above semantics in the compiler
+ is preferable.
+
+ Given the support above (however implemented) it only remains to
+ replace code that "throws" with a call to a well-documented "handler"
+ function in a separate compilation unit which may be replaced by
+ the user. The main source of exceptions that would be difficult
+ for users to avoid is memory allocation failures, but users can
+ define their own memory allocation primitives that never throw.
+ Otherwise, the complete list of such handlers, and which library
+ functions may call them, would be needed for users to be able to
+ implement the necessary substitutes. (Fortunately, they have the
+ source code.)
+
+ Opportunities
+ -------------
+
+ The template capabilities of C++ offer enormous opportunities for
+ optimizing common library operations, well beyond what would be
+ considered "eliminating overhead". In particular, many operations
+ done in Glibc with macros that depend on proprietary language
+ extensions can be implemented in pristine Standard C++. For example,
+ the chapter 25 algorithms, and even C library functions such as strchr,
+ can be specialized for the case of static arrays of known (small) size.
+
+ Detailed optimization opportunities are identified below where
+ the component where they would appear is discussed. Of course new
+ opportunities will be identified during implementation.
+
+ Unimplemented Required Library Features
+ ---------------------------------------
+
+ The standard specifies hundreds of components, grouped broadly by
+ chapter. These are listed in excruciating detail in the CHECKLIST
+ file.
+
+ 17 general
+ 18 support
+ 19 diagnostics
+ 20 utilities
+ 21 string
+ 22 locale
+ 23 containers
+ 24 iterators
+ 25 algorithms
+ 26 numerics
+ 27 iostreams
+ Annex D backward compatibility
+
+ Anyone participating in implementation of the library should obtain
+ a copy of the standard, ISO 14882. People in the U.S. can obtain an
+ electronic copy for US$18 from ANSI's web site. Those from other
+ countries should visit http://www.iso.org/ to find out the location
+ of their country's representation in ISO, in order to know who can
+ sell them a copy.
+
+ The emphasis in the following sections is on unimplemented features
+ and optimization opportunities.
+
+ Chapter 17 General
+ -------------------
+
+ Chapter 17 concerns overall library requirements.
+
+ The standard doesn't mention threads. A multi-thread (MT) extension
+ primarily affects operators new and delete (18), allocator (20),
+ string (21), locale (22), and iostreams (27). The common underlying
+ support needed for this is discussed under chapter 20.
+
+ The standard requirements on names from the C headers create a
+ lot of work, mostly done. Names in the C headers must be visible
+ in the std:: and sometimes the global namespace; the names in the
+ two scopes must refer to the same object. More stringent is that
+ Koenig lookup implies that any types specified as defined in std::
+ really are defined in std::. Names optionally implemented as
+ macros in C cannot be macros in C++. (An overview may be read at
+ &lt;http://www.cantrip.org/cheaders.html&gt;). The scripts "inclosure"
+ and "mkcshadow", and the directories shadow/ and cshadow/, are the
+ beginning of an effort to conform in this area.
+
+ A correct conforming definition of C header names based on underlying
+ C library headers, and practical linking of conforming namespaced
+ customer code with third-party C libraries depends ultimately on
+ an ABI change, allowing namespaced C type names to be mangled into
+ type names as if they were global, somewhat as C function names in a
+ namespace, or C++ global variable names, are left unmangled. Perhaps
+ another "extern" mode, such as 'extern "C-global"' would be an
+ appropriate place for such type definitions. Such a type would
+ affect mangling as follows:
+
+ namespace A {
+ struct X {};
+ extern "C-global" { // or maybe just 'extern "C"'
+ struct Y {};
+ };
+ }
+ void f(A::X*); // mangles to f__FPQ21A1X
+ void f(A::Y*); // mangles to f__FP1Y
+
+ (It may be that this is really the appropriate semantics for regular
+ 'extern "C"', and 'extern "C-global"', as an extension, would not be
+ necessary.) This would allow functions declared in non-standard C headers
+ (and thus fixable by neither us nor users) to link properly with functions
+ declared using C types defined in properly-namespaced headers. The
+ problem this solves is that C headers (which C++ programmers do persist
+ in using) frequently forward-declare C struct tags without including
+ the header where the type is defined, as in
+
+ struct tm;
+ void munge(tm*);
+
+ Without some compiler accommodation, munge cannot be called by correct
+ C++ code using a pointer to a correctly-scoped tm* value.
+
+ The current C headers use the preprocessor extension "#include_next",
+ which the compiler complains about when run "-pedantic".
+ (Incidentally, it appears that "-fpedantic" is currently ignored,
+ probably a bug.) The solution in the C compiler is to use
+ "-isystem" rather than "-I", but unfortunately in g++ this seems
+ also to wrap the whole header in an 'extern "C"' block, so it's
+ unusable for C++ headers. The correct solution appears to be to
+ allow the various special include-directory options, if not given
+ an argument, to affect subsequent include-directory options additively,
+ so that if one said
+
+ -pedantic -iprefix $(prefix) \
+ -idirafter -ino-pedantic -ino-extern-c -iwithprefix -I g++-v3 \
+ -iwithprefix -I g++-v3/ext
+
+ the compiler would search $(prefix)/g++-v3 and not report
+ pedantic warnings for files found there, but treat files in
+ $(prefix)/g++-v3/ext pedantically. (The undocumented semantics
+ of "-isystem" in g++ stink. Can they be rescinded? If not it
+ must be replaced with something more rationally behaved.)
+
+ All the C headers need the treatment above; in the standard these
+ headers are mentioned in various chapters. Below, I have only
+ mentioned those that present interesting implementation issues.
+
+ The components identified as "mostly complete", below, have not been
+ audited for conformance. In many cases where the library passes
+ conformance tests we have non-conforming extensions that must be
+ wrapped in #if guards for "pedantic" use, and in some cases renamed
+ in a conforming way for continued use in the implementation regardless
+ of conformance flags.
+
+ The STL portion of the library still depends on a header
+ stl/bits/stl_config.h full of #ifdef clauses. This apparatus
+ should be replaced with autoconf/automake machinery.
+
+ The SGI STL defines a type_traits&lt;&gt; template, specialized for
+ many types in their code including the built-in numeric and
+ pointer types and some library types, to direct optimizations of
+ standard functions. The SGI compiler has been extended to generate
+ specializations of this template automatically for user types,
+ so that use of STL templates on user types can take advantage of
+ these optimizations. Specializations for other, non-STL, types
+ would make more optimizations possible, but extending the gcc
+ compiler in the same way would be much better. Probably the next
+ round of standardization will ratify this, but probably with
+ changes, so it probably should be renamed to place it in the
+ implementation namespace.
+
+ The SGI STL also defines a large number of extensions visible in
+ standard headers. (Other extensions that appear in separate headers
+ have been sequestered in subdirectories ext/ and backward/.) All
+ these extensions should be moved to other headers where possible,
+ and in any case wrapped in a namespace (not std!), and (where kept
+ in a standard header) girded about with macro guards. Some cannot be
+ moved out of standard headers because they are used to implement
+ standard features. The canonical method for accommodating these
+ is to use a protected name, aliased in macro guards to a user-space
+ name. Unfortunately C++ offers no satisfactory template typedef
+ mechanism, so very ad-hoc and unsatisfactory aliasing must be used
+ instead.
+
+ Implementation of a template typedef mechanism should have the highest
+ priority among possible extensions, on the same level as implementation
+ of the template "export" feature.
+
+ Chapter 18 Language support
+ ----------------------------
+
+ Headers: &lt;limits&gt; &lt;new&gt; &lt;typeinfo&gt; &lt;exception&gt;
+ C headers: &lt;cstddef&gt; &lt;climits&gt; &lt;cfloat&gt; &lt;cstdarg&gt; &lt;csetjmp&gt;
+ &lt;ctime&gt; &lt;csignal&gt; &lt;cstdlib&gt; (also 21, 25, 26)
+
+ This defines the built-in exceptions, rtti, numeric_limits&lt;&gt;,
+ operator new and delete. Much of this is provided by the
+ compiler in its static runtime library.
+
+ Work to do includes defining numeric_limits&lt;&gt; specializations in
+ separate files for all target architectures. Values for integer types
+ except for bool and wchar_t are readily obtained from the C header
+ &lt;limits.h&gt;, but values for the remaining numeric types (bool, wchar_t,
+ float, double, long double) must be entered manually. This is
+ largely dog work except for those members whose values are not
+ easily deduced from available documentation. Also, this involves
+ some work in target configuration to identify the correct choice of
+ file to build against and to install.
+
+ The definitions of the various operators new and delete must be
+ made thread-safe, which depends on a portable exclusion mechanism,
+ discussed under chapter 20. Of course there is always plenty of
+ room for improvements to the speed of operators new and delete.
+
+ &lt;cstdarg&gt;, in Glibc, defines some macros that gcc does not allow to
+ be wrapped into an inline function. Probably this header will demand
+ attention whenever a new target is chosen. The functions atexit(),
+ exit(), and abort() in cstdlib have different semantics in C++, so
+ must be re-implemented for C++.
+
+ Chapter 19 Diagnostics
+ -----------------------
+
+ Headers: &lt;stdexcept&gt;
+ C headers: &lt;cassert&gt; &lt;cerrno&gt;
+
+ This defines the standard exception objects, which are "mostly complete".
+ Cygnus has a version, and now SGI provides a slightly different one.
+ It makes little difference which we use.
+
+ The C global name "errno", which C allows to be a variable or a macro,
+ is required in C++ to be a macro. For MT it must typically result in
+ a function call.
+
+ Chapter 20 Utilities
+ ---------------------
+ Headers: &lt;utility&gt; &lt;functional&gt; &lt;memory&gt;
+ C header: &lt;ctime&gt; (also in 18)
+
+ SGI STL provides "mostly complete" versions of all the components
+ defined in this chapter. However, the auto_ptr&lt;&gt; implementation
+ is known to be wrong. Furthermore, the standard definition of it
+ is known to be unimplementable as written. A minor change to the
+ standard would fix it, and auto_ptr&lt;&gt; should be adjusted to match.
+
+ Multi-threading affects the allocator implementation, and there must
+ be configuration/installation choices for different users' MT
+ requirements. Anyway, users will want to tune allocator options
+ to support different target conditions, MT or no.
+
+ The primitives used for MT implementation should be exposed, as an
+ extension, for users' own work. We need cross-CPU "mutex" support,
+ multi-processor shared-memory atomic integer operations, and single-
+ processor uninterruptible integer operations, and all three configurable
+ to be stubbed out for non-MT use, or to use an appropriately-loaded
+ dynamic library for the actual runtime environment, or statically
+ compiled in for cases where the target architecture is known.
+
+ Chapter 21 String
+ ------------------
+ Headers: &lt;string&gt;
+ C headers: &lt;cctype&gt; &lt;cwctype&gt; &lt;cstring&gt; &lt;cwchar&gt; (also in 27)
+ &lt;cstdlib&gt; (also in 18, 25, 26)
+
+ We have "mostly-complete" char_traits&lt;&gt; implementations. Many of the
+ char_traits&lt;char&gt; operations might be optimized further using existing
+ proprietary language extensions.
+
+ We have a "mostly-complete" basic_string&lt;&gt; implementation. The work
+ to manually instantiate char and wchar_t specializations in object
+ files to improve link-time behavior is extremely unsatisfactory,
+ literally tripling library-build time with no commensurate improvement
+ in static program link sizes. It must be redone. (Similar work is
+ needed for some components in chapters 22 and 27.)
+
+ Other work needed for strings is MT-safety, as discussed under the
+ chapter 20 heading.
+
+ The standard C type mbstate_t from &lt;cwchar&gt; and used in char_traits&lt;&gt;
+ must be different in C++ than in C, because in C++ the default constructor
+ value mbstate_t() must be the "base" or "ground" sequence state.
+ (According to the likely resolution of a recently raised Core issue,
+ this may become unnecessary. However, there are other reasons to
+ use a state type not as limited as whatever the C library provides.)
+ If we might want to provide conversions from (e.g.) internally-
+ represented EUC-wide to externally-represented Unicode, or vice-
+ versa, the mbstate_t we choose will need to be more accommodating
+ than what might be provided by an underlying C library.
+
+ There remain some basic_string template-member functions which do
+ not overload properly with their non-template brethren. The infamous
+ hack akin to what was done in vector&lt;&gt; is needed, to conform to
+ 23.1.1 para 10. The CHECKLIST items for basic_string marked 'X',
+ or incomplete, are so marked for this reason.
+
+ Replacing the string iterators, which currently are simple character
+ pointers, with class objects would greatly increase the safety of the
+ client interface, and also permit a "debug" mode in which range,
+ ownership, and validity are rigorously checked. The current use of
+ raw pointers as string iterators is evil. vector&lt;&gt; iterators need the
+ same treatment. Note that the current implementation freely mixes
+ pointers and iterators, and that must be fixed before safer iterators
+ can be introduced.
+
+ Some of the functions in &lt;cstring&gt; are different from the C version.
+ generally overloaded on const and non-const argument pointers. For
+ example, in &lt;cstring&gt; strchr is overloaded. The functions isupper
+ etc. in &lt;cctype&gt; typically implemented as macros in C are functions
+ in C++, because they are overloaded with others of the same name
+ defined in &lt;locale&gt;.
+
+ Many of the functions required in &lt;cwctype&gt; and &lt;cwchar&gt; cannot be
+ implemented using underlying C facilities on intended targets because
+ such facilities only partly exist.
+
+ Chapter 22 Locale
+ ------------------
+ Headers: &lt;locale&gt;
+ C headers: &lt;clocale&gt;
+
+ We have a "mostly complete" class locale, with the exception of
+ code for constructing, and handling the names of, named locales.
+ The ways that locales are named (particularly when categories
+ (e.g. LC_TIME, LC_COLLATE) are different) varies among all target
+ environments. This code must be written in various versions and
+ chosen by configuration parameters.
+
+ Members of many of the facets defined in &lt;locale&gt; are stubs. Generally,
+ there are two sets of facets: the base class facets (which are supposed
+ to implement the "C" locale) and the "byname" facets, which are supposed
+ to read files to determine their behavior. The base ctype&lt;&gt;, collate&lt;&gt;,
+ and numpunct&lt;&gt; facets are "mostly complete", except that the table of
+ bitmask values used for "is" operations, and corresponding mask values,
+ are still defined in libio and just included/linked. (We will need to
+ implement these tables independently, soon, but should take advantage
+ of libio where possible.) The num_put&lt;&gt;::put members for integer types
+ are "mostly complete".
+
+ A complete list of what has and has not been implemented may be
+ found in CHECKLIST. However, note that the current definition of
+ codecvt&lt;wchar_t,char,mbstate_t&gt; is wrong. It should simply write
+ out the raw bytes representing the wide characters, rather than
+ trying to convert each to a corresponding single "char" value.
+
+ Some of the facets are more important than others. Specifically,
+ the members of ctype&lt;&gt;, numpunct&lt;&gt;, num_put&lt;&gt;, and num_get&lt;&gt; facets
+ are used by other library facilities defined in &lt;string&gt;, &lt;istream&gt;,
+ and &lt;ostream&gt;, and the codecvt&lt;&gt; facet is used by basic_filebuf&lt;&gt;
+ in &lt;fstream&gt;, so a conforming iostream implementation depends on
+ these.
+
+ The "long long" type eventually must be supported, but code mentioning
+ it should be wrapped in #if guards to allow pedantic-mode compiling.
+
+ Performance of num_put&lt;&gt; and num_get&lt;&gt; depend critically on
+ caching computed values in ios_base objects, and on extensions
+ to the interface with streambufs.
+
+ Specifically: retrieving a copy of the locale object, extracting
+ the needed facets, and gathering data from them, for each call to
+ (e.g.) operator&lt;&lt; would be prohibitively slow. To cache format
+ data for use by num_put&lt;&gt; and num_get&lt;&gt; we have a _Format_cache&lt;&gt;
+ object stored in the ios_base::pword() array. This is constructed
+ and initialized lazily, and is organized purely for utility. It
+ is discarded when a new locale with different facets is imbued.
+
+ Using only the public interfaces of the iterator arguments to the
+ facet functions would limit performance by forbidding "vector-style"
+ character operations. The streambuf iterator optimizations are
+ described under chapter 24, but facets can also bypass the streambuf
+ iterators via explicit specializations and operate directly on the
+ streambufs, and use extended interfaces to get direct access to the
+ streambuf internal buffer arrays. These extensions are mentioned
+ under chapter 27. These optimizations are particularly important
+ for input parsing.
+
+ Unused virtual members of locale facets can be omitted, as mentioned
+ above, by a smart linker.
+
+ Chapter 23 Containers
+ ----------------------
+ 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;
+
+ All the components in chapter 23 are implemented in the SGI STL.
+ They are "mostly complete"; they include a large number of
+ nonconforming extensions which must be wrapped. Some of these
+ are used internally and must be renamed or duplicated.
+
+ The SGI components are optimized for large-memory environments. For
+ embedded targets, different criteria might be more appropriate. Users
+ will want to be able to tune this behavior. We should provide
+ ways for users to compile the library with different memory usage
+ characteristics.
+
+ A lot more work is needed on factoring out common code from different
+ specializations to reduce code size here and in chapter 25. The
+ easiest fix for this would be a compiler/ABI improvement that allows
+ the compiler to recognize when a specialization depends only on the
+ size (or other gross quality) of a template argument, and allow the
+ linker to share the code with similar specializations. In its
+ absence, many of the algorithms and containers can be partial-
+ specialized, at least for the case of pointers, but this only solves
+ a small part of the problem. Use of a type_traits-style template
+ allows a few more optimization opportunities, more if the compiler
+ can generate the specializations automatically.
+
+ As an optimization, containers can specialize on the default allocator
+ and bypass it, or take advantage of details of its implementation
+ after it has been improved upon.
+
+ Replacing the vector iterators, which currently are simple element
+ pointers, with class objects would greatly increase the safety of the
+ client interface, and also permit a "debug" mode in which range,
+ ownership, and validity are rigorously checked. The current use of
+ pointers for iterators is evil.
+
+ As mentioned for chapter 24, the deque iterator is a good example of
+ an opportunity to implement a "staged" iterator that would benefit
+ from specializations of some algorithms.
+
+ Chapter 24 Iterators
+ ---------------------
+ Headers: &lt;iterator&gt;
+
+ Standard iterators are "mostly complete", with the exception of
+ the stream iterators, which are not yet templatized on the
+ stream type. Also, the base class template iterator&lt;&gt; appears
+ to be wrong, so everything derived from it must also be wrong,
+ currently.
+
+ The streambuf iterators (currently located in stl/bits/std_iterator.h,
+ but should be under bits/) can be rewritten to take advantage of
+ friendship with the streambuf implementation.
+
+ Matt Austern has identified opportunities where certain iterator
+ types, particularly including streambuf iterators and deque
+ iterators, have a "two-stage" quality, such that an intermediate
+ limit can be checked much more quickly than the true limit on
+ range operations. If identified with a member of iterator_traits,
+ algorithms may be specialized for this case. Of course the
+ iterators that have this quality can be identified by specializing
+ a traits class.
+
+ Many of the algorithms must be specialized for the streambuf
+ iterators, to take advantage of block-mode operations, in order
+ to allow iostream/locale operations' performance not to suffer.
+ It may be that they could be treated as staged iterators and
+ take advantage of those optimizations.
+
+ Chapter 25 Algorithms
+ ----------------------
+ Headers: &lt;algorithm&gt;
+ C headers: &lt;cstdlib&gt; (also in 18, 21, 26))
+
+ The algorithms are "mostly complete". As mentioned above, they
+ are optimized for speed at the expense of code and data size.
+
+ Specializations of many of the algorithms for non-STL types would
+ give performance improvements, but we must use great care not to
+ interfere with fragile template overloading semantics for the
+ standard interfaces. Conventionally the standard function template
+ interface is an inline which delegates to a non-standard function
+ which is then overloaded (this is already done in many places in
+ the library). Particularly appealing opportunities for the sake of
+ iostream performance are for copy and find applied to streambuf
+ iterators or (as noted elsewhere) for staged iterators, of which
+ the streambuf iterators are a good example.
+
+ The bsearch and qsort functions cannot be overloaded properly as
+ required by the standard because gcc does not yet allow overloading
+ on the extern-"C"-ness of a function pointer.
+
+ Chapter 26 Numerics
+ --------------------
+ Headers: &lt;complex&gt; &lt;valarray&gt; &lt;numeric&gt;
+ C headers: &lt;cmath&gt;, &lt;cstdlib&gt; (also 18, 21, 25)
+
+ Numeric components: Gabriel dos Reis's valarray, Drepper's complex,
+ and the few algorithms from the STL are "mostly done". Of course
+ optimization opportunities abound for the numerically literate. It
+ is not clear whether the valarray implementation really conforms
+ fully, in the assumptions it makes about aliasing (and lack thereof)
+ in its arguments.
+
+ The C div() and ldiv() functions are interesting, because they are the
+ only case where a C library function returns a class object by value.
+ Since the C++ type div_t must be different from the underlying C type
+ (which is in the wrong namespace) the underlying functions div() and
+ ldiv() cannot be re-used efficiently. Fortunately they are trivial to
+ re-implement.
+
+ Chapter 27 Iostreams
+ ---------------------
+ Headers: &lt;iosfwd&gt; &lt;streambuf&gt; &lt;ios&gt; &lt;ostream&gt; &lt;istream&gt; &lt;iostream&gt;
+ &lt;iomanip&gt; &lt;sstream&gt; &lt;fstream&gt;
+ C headers: &lt;cstdio&gt; &lt;cwchar&gt; (also in 21)
+
+ Iostream is currently in a very incomplete state. &lt;iosfwd&gt;, &lt;iomanip&gt;,
+ ios_base, and basic_ios&lt;&gt; are "mostly complete". basic_streambuf&lt;&gt; and
+ basic_ostream&lt;&gt; are well along, but basic_istream&lt;&gt; has had little work
+ done. The standard stream objects, &lt;sstream&gt; and &lt;fstream&gt; have been
+ started; basic_filebuf&lt;&gt; "write" functions have been implemented just
+ enough to do "hello, world".
+
+ Most of the istream and ostream operators &lt;&lt; and &gt;&gt; (with the exception
+ of the op&lt;&lt;(integer) ones) have not been changed to use locale primitives,
+ sentry objects, or char_traits members.
+
+ All these templates should be manually instantiated for char and
+ wchar_t in a way that links only used members into user programs.
+
+ Streambuf is fertile ground for optimization extensions. An extended
+ interface giving iterator access to its internal buffer would be very
+ useful for other library components.
+
+ Iostream operations (primarily operators &lt;&lt; and &gt;&gt;) can take advantage
+ of the case where user code has not specified a locale, and bypass locale
+ operations entirely. The current implementation of op&lt;&lt;/num_put&lt;&gt;::put,
+ for the integer types, demonstrates how they can cache encoding details
+ from the locale on each operation. There is lots more room for
+ optimization in this area.
+
+ The definition of the relationship between the standard streams
+ cout et al. and stdout et al. requires something like a "stdiobuf".
+ The SGI solution of using double-indirection to actually use a
+ stdio FILE object for buffering is unsatisfactory, because it
+ interferes with peephole loop optimizations.
+
+ The &lt;sstream&gt; header work has begun. stringbuf can benefit from
+ friendship with basic_string&lt;&gt; and basic_string&lt;&gt;::_Rep to use
+ those objects directly as buffers, and avoid allocating and making
+ copies.
+
+ The basic_filebuf&lt;&gt; template is a complex beast. It is specified to
+ use the locale facet codecvt&lt;&gt; to translate characters between native
+ files and the locale character encoding. In general this involves
+ two buffers, one of "char" representing the file and another of
+ "char_type", for the stream, with codecvt&lt;&gt; translating. The process
+ is complicated by the variable-length nature of the translation, and
+ the need to seek to corresponding places in the two representations.
+ For the case of basic_filebuf&lt;char&gt;, when no translation is needed,
+ a single buffer suffices. A specialized filebuf can be used to reduce
+ code space overhead when no locale has been imbued. Matt Austern's
+ work at SGI will be useful, perhaps directly as a source of code, or
+ at least as an example to draw on.
+
+ Filebuf, almost uniquely (cf. operator new), depends heavily on
+ underlying environmental facilities. In current releases iostream
+ depends fairly heavily on libio constant definitions, but it should
+ be made independent. It also depends on operating system primitives
+ for file operations. There is immense room for optimizations using
+ (e.g.) mmap for reading. The shadow/ directory wraps, besides the
+ standard C headers, the libio.h and unistd.h headers, for use mainly
+ by filebuf. These wrappings have not been completed, though there
+ is scaffolding in place.
+
+ The encapsulation of certain C header &lt;cstdio&gt; names presents an
+ interesting problem. It is possible to define an inline std::fprintf()
+ implemented in terms of the 'extern "C"' vfprintf(), but there is no
+ standard vfscanf() to use to implement std::fscanf(). It appears that
+ vfscanf but be re-implemented in C++ for targets where no vfscanf
+ extension has been defined. This is interesting in that it seems
+ to be the only significant case in the C library where this kind of
+ rewriting is necessary. (Of course Glibc provides the vfscanf()
+ extension.) (The functions related to exit() must be rewritten
+ for other reasons.)
+
+
+ Annex D
+ -------
+ Headers: &lt;strstream&gt;
+
+ Annex D defines many non-library features, and many minor
+ modifications to various headers, and a complete header.
+ It is "mostly done", except that the libstdc++-2 &lt;strstream&gt;
+ header has not been adopted into the library, or checked to
+ verify that it matches the draft in those details that were
+ clarified by the committee. Certainly it must at least be
+ moved into the std namespace.
+
+ We still need to wrap all the deprecated features in #if guards
+ so that pedantic compile modes can detect their use.
+
+ Nonstandard Extensions
+ ----------------------
+ Headers: &lt;iostream.h&gt; &lt;strstream.h&gt; &lt;hash&gt; &lt;rbtree&gt;
+ &lt;pthread_alloc&gt; &lt;stdiobuf&gt; (etc.)
+
+ User code has come to depend on a variety of nonstandard components
+ that we must not omit. Much of this code can be adopted from
+ libstdc++-v2 or from the SGI STL. This particularly includes
+ &lt;iostream.h&gt;, &lt;strstream.h&gt;, and various SGI extensions such
+ as &lt;hash_map.h&gt;. Many of these are already placed in the
+ subdirectories ext/ and backward/. (Note that it is better to
+ include them via "&lt;backward/hash_map.h&gt;" or "&lt;ext/hash_map&gt;" than
+ to search the subdirectory itself via a "-I" directive.
+ </literallayout>
+</section>
+
+</appendix>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_free.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_free.xml
new file mode 100644
index 000000000..0ed7ba72d
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_free.xml
@@ -0,0 +1,174 @@
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.free" xreflabel="Free">
+<?dbhtml filename="appendix_free.html"?>
+
+<info><title>
+ Free Software Needs Free Documentation
+ <indexterm>
+ <primary>Appendix</primary>
+ <secondary>Free Documentation</secondary>
+ </indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+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
+these systems. Many of our most important programs do not come with
+full manuals. Documentation is an essential part of any software
+package; when an important free software package does not come with a
+free manual, that is a major gap. We have many such gaps today.
+</para>
+
+<para>
+Once upon a time, many years ago, I thought I would learn Perl. I got
+a copy of a free manual, but I found it hard to read. When I asked
+Perl users about alternatives, they told me that there were better
+introductory manuals--but those were not free.
+</para>
+
+<para>
+Why was this? The authors of the good manuals had written them for
+O'Reilly Associates, which published them with restrictive terms--no
+copying, no modification, source files not available--which exclude
+them from the free software community.
+</para>
+
+<para>
+That wasn't the first time this sort of thing has happened, and (to
+our community's great loss) it was far from the last. Proprietary
+manual publishers have enticed a great many authors to restrict their
+manuals since then. Many times I have heard a GNU user eagerly tell
+me about a manual that he is writing, with which he expects to help
+the GNU project--and then had my hopes dashed, as he proceeded to
+explain that he had signed a contract with a publisher that would
+restrict it so that we cannot use it.
+</para>
+
+<para>
+Given that writing good English is a rare skill among programmers, we
+can ill afford to lose manuals this way.
+</para>
+
+<para>
+ 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/doc/doc.html">sells printed copies</link> 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.
+These restrictions are the problems.
+</para>
+
+<para>
+The criterion for a free manual is pretty much the same as for free
+software: it is a matter of giving all users certain freedoms.
+Redistribution (including commercial redistribution) must be
+permitted, so that the manual can accompany every copy of the program,
+on-line or on paper. Permission for modification is crucial too.
+</para>
+
+<para>
+As a general rule, I don't believe that it is essential for people to
+have permission to modify all sorts of articles and books. The issues
+for writings are not necessarily the same as those for software. For
+example, I don't think you or I are obliged to give permission to
+modify articles like this one, which describe our actions and our
+views.
+</para>
+
+<para>
+But there is a particular reason why the freedom to modify is crucial
+for documentation for free software. When people exercise their right
+to modify the software, and add or change its features, if they are
+conscientious they will change the manual too--so they can provide
+accurate and usable documentation with the modified program. A manual
+which forbids programmers to be conscientious and finish the job, or
+more precisely requires them to write a new manual from scratch if
+they change the program, does not fill our community's needs.
+</para>
+
+<para>
+While a blanket prohibition on modification is unacceptable, some
+kinds of limits on the method of modification pose no problem. For
+example, requirements to preserve the original author's copyright
+notice, the distribution terms, or the list of authors, are ok. It is
+also no problem to require modified versions to include notice that
+they were modified, even to have entire sections that may not be
+deleted or changed, as long as these sections deal with nontechnical
+topics. (Some GNU manuals have them.)
+</para>
+
+<para>
+These kinds of restrictions are not a problem because, as a practical
+matter, they don't stop the conscientious programmer from adapting the
+manual to fit the modified program. In other words, they don't block
+the free software community from making full use of the manual.
+</para>
+
+<para>
+However, it must be possible to modify all the <emphasis>technical</emphasis>
+content of the manual, and then distribute the result in all the usual
+media, through all the usual channels; otherwise, the restrictions do
+block the community, the manual is not free, and so we need another
+manual.
+</para>
+
+<para>
+Unfortunately, it is often hard to find someone to write another
+manual when a proprietary manual exists. The obstacle is that many
+users think that a proprietary manual is good enough--so they don't
+see the need to write a free manual. They do not see that the free
+operating system has a gap that needs filling.
+</para>
+
+<para>
+Why do users think that proprietary manuals are good enough? Some
+have not considered the issue. I hope this article will do something
+to change that.
+</para>
+
+<para>
+Other users consider proprietary manuals acceptable for the same
+reason so many people consider proprietary software acceptable: they
+judge in purely practical terms, not using freedom as a criterion.
+These people are entitled to their opinions, but since those opinions
+spring from values which do not include freedom, they are no guide for
+those of us who do value freedom.
+</para>
+
+<para>
+Please spread the word about this issue. We continue to lose manuals
+to proprietary publishing. If we spread the word that proprietary
+manuals are not sufficient, perhaps the next person who wants to help
+GNU by writing documentation will realize, before it is too late, that
+he must above all make it free.
+</para>
+
+<para>
+We can also encourage commercial publishers to sell free, copylefted
+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.
+</para>
+<para>
+[Note: We now maintain a <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org/licensing/doc/other-free-books.html">web page
+that lists free books available from other publishers</link>].
+</para>
+
+<para>Copyright © 2004, 2005, 2006, 2007 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</para>
+
+<para>Verbatim copying and distribution of this entire article are
+permitted worldwide, without royalty, in any medium, provided this
+notice is preserved.</para>
+
+<para>Report any problems or suggestions to <email>webmaster@fsf.org</email>.</para>
+
+</appendix>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_porting.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_porting.xml
new file mode 100644
index 000000000..8eb90d187
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/appendix_porting.xml
@@ -0,0 +1,46 @@
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting" xreflabel="Porting">
+<?dbhtml filename="appendix_porting.html"?>
+
+<info><title>
+ Porting and Maintenance
+ <indexterm>
+ <primary>Appendix</primary>
+ <secondary>Porting and Maintenance</secondary>
+ </indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+ <!-- Hacking the Build System -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="build_hacking.xml">
+ </xi:include>
+
+ <!-- Hacking the Documentation Systems -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="documentation_hacking.xml">
+ </xi:include>
+
+ <!-- Internals: Porting to New Hardware or Operating Systems -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="internals.xml">
+ </xi:include>
+
+ <!-- Test -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="test.xml">
+ </xi:include>
+
+ <!-- ABI Policy and Guidelines -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="abi.xml">
+ </xi:include>
+
+ <!-- API Evolution and Deprecation History -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="evolution.xml">
+ </xi:include>
+
+ <!-- Backwards Compatibility -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="backwards_compatibility.xml">
+ </xi:include>
+
+</appendix>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/atomics.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/atomics.xml
new file mode 100644
index 000000000..5bd07585d
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/atomics.xml
@@ -0,0 +1,51 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.atomics" xreflabel="Atomics">
+<?dbhtml filename="atomics.html"?>
+
+<info><title>
+ Atomics
+ <indexterm><primary>Atomics</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ <keyword>atomic</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+ Facilities for atomic operations.
+</para>
+
+<!-- Sect1 01 : API -->
+<section xml:id="std.atomics.api"><info><title>API Reference</title></info>
+
+
+ <para>
+ All items are declared in the standard header
+ file <filename>atomic</filename>.
+ </para>
+
+ <para>
+ Set of typedefs that map <type>int</type> to
+ <classname>atomic_int</classname>, and so on for all builtin
+ integral types. Global enumeration <type>memory_order</type> to
+ control memory ordering. Also includes
+ <classname>atomic</classname>, a class template with member
+ functions such as <function>load</function> and
+ <function>store</function> that is instantiable such that
+ <classname>atomic_int</classname> is the base class of
+ <classname>atomic&lt;int&gt;</classname>.
+ </para>
+
+ <para>
+ Full API details.
+ </para>
+
+ <!-- Doxygen XML: api/group__atomics.xml -->
+
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/auto_ptr.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/auto_ptr.xml
new file mode 100644
index 000000000..2321b0f50
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/auto_ptr.xml
@@ -0,0 +1,130 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.util.memory.auto_ptr" xreflabel="auto_ptr">
+<?dbhtml filename="auto_ptr.html"?>
+
+<info><title>auto_ptr</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>auto_ptr</keyword>
+ </keywordset>
+</info>
+
+
+
+<section xml:id="auto_ptr.limitations"><info><title>Limitations</title></info>
+
+
+ <para>Explaining all of the fun and delicious things that can
+ happen with misuse of the <classname>auto_ptr</classname> class
+ template (called <acronym>AP</acronym> here) would take some
+ time. Suffice it to say that the use of <acronym>AP</acronym>
+ safely in the presence of copying has some subtleties.
+ </para>
+ <para>
+ The AP class is a really
+ nifty idea for a smart pointer, but it is one of the dumbest of
+ all the smart pointers -- and that's fine.
+ </para>
+ <para>
+ AP is not meant to be a supersmart solution to all resource
+ leaks everywhere. Neither is it meant to be an effective form
+ of garbage collection (although it can help, a little bit).
+ And it can <emphasis>not</emphasis>be used for arrays!
+ </para>
+ <para>
+ <acronym>AP</acronym> is meant to prevent nasty leaks in the
+ presence of exceptions. That's <emphasis>all</emphasis>. This
+ code is AP-friendly:
+ </para>
+ <programlisting>
+ // Not a recommend naming scheme, but good for web-based FAQs.
+ typedef std::auto_ptr&lt;MyClass&gt; APMC;
+
+ extern function_taking_MyClass_pointer (MyClass*);
+ extern some_throwable_function ();
+
+ void func (int data)
+ {
+ APMC ap (new MyClass(data));
+
+ some_throwable_function(); // this will throw an exception
+
+ function_taking_MyClass_pointer (ap.get());
+ }
+ </programlisting>
+ <para>When an exception gets thrown, the instance of MyClass that's
+ been created on the heap will be <function>delete</function>'d as the stack is
+ unwound past <function>func()</function>.
+ </para>
+ <para>Changing that code as follows is not <acronym>AP</acronym>-friendly:
+ </para>
+ <programlisting>
+ APMC ap (new MyClass[22]);
+ </programlisting>
+ <para>You will get the same problems as you would without the use
+ of <acronym>AP</acronym>:
+ </para>
+ <programlisting>
+ char* array = new char[10]; // array new...
+ ...
+ delete array; // ...but single-object delete
+ </programlisting>
+ <para>
+ AP cannot tell whether the pointer you've passed at creation points
+ to one or many things. If it points to many things, you are about
+ to die. AP is trivial to write, however, so you could write your
+ own <code>auto_array_ptr</code> for that situation (in fact, this has
+ been done many times; check the mailing lists, Usenet, Boost, etc).
+ </para>
+</section>
+
+<section xml:id="auto_ptr.using"><info><title>Use in Containers</title></info>
+
+
+ <para>
+ </para>
+ <para>All of the <link linkend="std.containers">containers</link>
+ described in the standard library require their contained types
+ to have, among other things, a copy constructor like this:
+ </para>
+ <programlisting>
+ struct My_Type
+ {
+ My_Type (My_Type const&amp;);
+ };
+ </programlisting>
+ <para>
+ Note the const keyword; the object being copied shouldn't change.
+ The template class <code>auto_ptr</code> (called AP here) does not
+ meet this requirement. Creating a new AP by copying an existing
+ one transfers ownership of the pointed-to object, which means that
+ the AP being copied must change, which in turn means that the
+ copy ctors of AP do not take const objects.
+ </para>
+ <para>
+ The resulting rule is simple: <emphasis>Never ever use a
+ container of auto_ptr objects</emphasis>. The standard says that
+ <quote>undefined</quote> behavior is the result, but it is
+ guaranteed to be messy.
+ </para>
+ <para>
+ To prevent you from doing this to yourself, the
+ <link linkend="manual.ext.compile_checks">concept checks</link> built
+ in to this implementation will issue an error if you try to
+ compile code like this:
+ </para>
+ <programlisting>
+ #include &lt;vector&gt;
+ #include &lt;memory&gt;
+
+ void f()
+ {
+ std::vector&lt; std::auto_ptr&lt;int&gt; &gt; vec_ap_int;
+ }
+ </programlisting>
+ <para>
+Should you try this with the checks enabled, you will see an error.
+ </para>
+</section>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
new file mode 100644
index 000000000..869b63f19
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
@@ -0,0 +1,1319 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.appendix.porting.backwards" xreflabel="backwards">
+<?dbhtml filename="backwards.html"?>
+
+<info><title>Backwards Compatibility</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>backwards</keyword>
+ </keywordset>
+</info>
+
+
+
+<section xml:id="backwards.first"><info><title>First</title></info>
+
+
+<para>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.
+</para>
+
+<para>Some background: libg++ was designed and created when there was no
+ISO standard to provide guidance. Classes like linked lists are now
+provided for by <classname>list&lt;T&gt;</classname> and do not need to be
+created by <function>genclass</function>. (For that matter, templates exist
+now and are well-supported, whereas genclass (mostly) predates them.)
+</para>
+
+<para>There are other classes in libg++ that are not specified in the
+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
+<quote>obvious</quote> classes didn't get included.
+</para>
+
+<para>Known Issues include many of the limitations of its immediate ancestor.</para>
+
+<para>Portability notes and known implementation limitations are as follows.</para>
+
+<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 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">&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">&lt;iostream&gt;</filename>
+ explicitly to get the required definitions.
+ </para>
+<para> Some include adjustment may be required.</para>
+
+<para>This project is no longer maintained or supported, and the sources
+archived. For the desperate,
+the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/extensions.html">GCC extensions
+page</link> describes where to find the last libg++ source. The code is
+considered replaced and rewritten.
+</para>
+</section>
+</section>
+
+<section xml:id="backwards.second"><info><title>Second</title></info>
+
+
+<para>
+ 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
+ releases: egcs 1.x, gcc 2.95, and gcc 2.96.
+</para>
+
+<para>
+ The STL portions of this library are based on SGI/HP STL release 3.11.
+</para>
+
+<para>
+ This project is no longer maintained or supported, and the sources
+ archived. The code is considered replaced and rewritten.
+</para>
+
+<para>
+ Portability notes and known implementation limitations are as follows.
+</para>
+
+<section xml:id="backwards.second.std"><info><title>Namespace <code>std::</code> not supported</title></info>
+
+
+ <para>
+ Some care is required to support C++ compiler and or library
+ implementation that do not have the standard library in
+ <code>namespace std</code>.
+ </para>
+
+ <para>
+ The following sections list some possible solutions to support compilers
+ that cannot ignore <code>std::</code>-qualified names.
+ </para>
+
+ <para>
+ 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 <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
+ probably applies to some other compilers as well.
+ </para>
+
+ <para>
+ Second, experiment with a variety of pre-processor tricks.
+ </para>
+
+ <para>
+ By defining <code>std</code> as a macro, fully-qualified namespace
+ calls become global. Volia.
+ </para>
+
+<programlisting>
+#ifdef WICKEDLY_OLD_COMPILER
+# define std
+#endif
+</programlisting>
+
+ <para>
+ Thanks to Juergen Heinzl who posted this solution on gnu.gcc.help.
+ </para>
+
+ <para>
+ Another pre-processor based approach is to define a macro
+ <code>NAMESPACE_STD</code>, which is defined to either
+ <quote> </quote> or <quote>std</quote> based on a compile-type
+ test. On GNU systems, this can be done with autotools by means of
+ an autoconf test (see below) for <code>HAVE_NAMESPACE_STD</code>,
+ then using that to set a value for the <code>NAMESPACE_STD</code>
+ macro. At that point, one is able to use
+ <code>NAMESPACE_STD::string</code>, which will evaluate to
+ <code>std::string</code> or <code>::string</code> (i.e., in the
+ global namespace on systems that do not put <code>string</code> in
+ <code>std::</code>).
+ </para>
+
+<programlisting>
+dnl @synopsis AC_CXX_NAMESPACE_STD
+dnl
+dnl If the compiler supports namespace std, define
+dnl HAVE_NAMESPACE_STD.
+dnl
+dnl @category Cxx
+dnl @author Todd Veldhuizen
+dnl @author Luc Maisonobe &lt;luc@spaceroots.org&gt;
+dnl @version 2004-02-04
+dnl @license AllPermissive
+AC_DEFUN([AC_CXX_NAMESPACE_STD], [
+ AC_CACHE_CHECK(if g++ supports namespace std,
+ ac_cv_cxx_have_std_namespace,
+ [AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([#include &lt;iostream&gt;
+ std::istream&amp; is = std::cin;],,
+ ac_cv_cxx_have_std_namespace=yes, ac_cv_cxx_have_std_namespace=no)
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_have_std_namespace" = yes; then
+ AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ])
+ fi
+])
+</programlisting>
+</section>
+
+<section xml:id="backwards.second.iterators"><info><title>Illegal iterator usage</title></info>
+
+<para>
+ The following illustrate implementation-allowed illegal iterator
+ use, and then correct use.
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ you cannot do <code>ostream::operator&lt;&lt;(iterator)</code>
+ to print the address of the iterator =&gt; use
+ <code>operator&lt;&lt; &amp;*iterator</code> instead
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ you cannot clear an iterator's reference (<code>iterator =
+ 0</code>) =&gt; use <code>iterator = iterator_type();</code>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <code>if (iterator)</code> won't work any more =&gt; use
+ <code>if (iterator != iterator_type())</code>
+ </para>
+ </listitem>
+</itemizedlist>
+</section>
+
+<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">&lt;ctype.h&gt;</filename> functionality as macros
+ (isspace, isalpha etc.).
+ </para>
+
+ <para>
+ This implementations of libstdc++, however, keep these functions
+ as macros, and so it is not back-portable to use fully qualified
+ names. For example:
+ </para>
+
+<programlisting>
+#include &lt;cctype&gt;
+int main() { std::isspace('X'); }
+</programlisting>
+
+<para>
+ Results in something like this:
+</para>
+
+<programlisting>
+std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
+</programlisting>
+
+<para>
+ A solution is to modify a header-file so that the compiler tells
+ <filename class="headerfile">&lt;ctype.h&gt;</filename> to define functions
+ instead of macros:
+</para>
+
+<programlisting>
+// This keeps isalnum, et al from being propagated as macros.
+#if __linux__
+# define __NO_CTYPE 1
+#endif
+</programlisting>
+
+<para>
+ 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">&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 xml:id="backwards.second.at"><info><title>No <code>vector::at</code>, <code>deque::at</code>, <code>string::at</code></title></info>
+
+
+<para>
+ One solution is to add an autoconf-test for this:
+</para>
+
+<programlisting>
+AC_MSG_CHECKING(for container::at)
+AC_TRY_COMPILE(
+[
+#include &lt;vector&gt;
+#include &lt;deque&gt;
+#include &lt;string&gt;
+
+using namespace std;
+],
+[
+deque&lt;int&gt; test_deque(3);
+test_deque.at(2);
+vector&lt;int&gt; test_vector(2);
+test_vector.at(1);
+string test_string(<quote>test_string</quote>);
+test_string.at(3);
+],
+[AC_MSG_RESULT(yes)
+AC_DEFINE(HAVE_CONTAINER_AT)],
+[AC_MSG_RESULT(no)])
+</programlisting>
+
+<para>
+ If you are using other (non-GNU) compilers it might be a good idea
+ to check for <code>string::at</code> separately.
+</para>
+
+</section>
+
+<section xml:id="backwards.second.eof"><info><title>No <code>std::char_traits&lt;char&gt;::eof</code></title></info>
+
+
+<para>
+ Use some kind of autoconf test, plus this:
+</para>
+
+<programlisting>
+#ifdef HAVE_CHAR_TRAITS
+#define CPP_EOF std::char_traits&lt;char&gt;::eof()
+#else
+#define CPP_EOF EOF
+#endif
+</programlisting>
+
+</section>
+
+<section xml:id="backwards.second.stringclear"><info><title>No <code>string::clear</code></title></info>
+
+
+<para>
+ There are two functions for deleting the contents of a string:
+ <code>clear</code> and <code>erase</code> (the latter returns the
+ string).
+</para>
+
+<programlisting>
+void
+clear() { _M_mutate(0, this-&gt;size(), 0); }
+</programlisting>
+
+<programlisting>
+basic_string&amp;
+erase(size_type __pos = 0, size_type __n = npos)
+{
+ return this-&gt;replace(_M_check(__pos), _M_fold(__pos, __n),
+ _M_data(), _M_data());
+}
+</programlisting>
+
+<para>
+ Unfortunately, <code>clear</code> is not implemented in this
+ version, so you should use <code>erase</code> (which is probably
+ faster than <code>operator=(charT*)</code>).
+</para>
+</section>
+
+<section xml:id="backwards.second.ostreamform_istreamscan"><info><title>
+ Removal of <code>ostream::form</code> and <code>istream::scan</code>
+ extensions
+</title></info>
+
+
+<para>
+ These are no longer supported. Please use stringstreams instead.
+</para>
+</section>
+
+<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">&lt;sstream&gt;</filename>), for
+ compatibility with older implementations the pre-ISO
+ <code>i/ostrstream</code> (<filename class="headerfile">&lt;strstream&gt;</filename>) interface is also provided,
+ with these caveats:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ <code>strstream</code> is considered to be deprecated
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <code>strstream</code> is limited to <code>char</code>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ with <code>ostringstream</code> you don't have to take care of
+ terminating the string or freeing its memory
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <code>istringstream</code> can be re-filled (clear();
+ str(input);)
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ You can then use output-stringstreams like this:
+</para>
+
+<programlisting>
+#ifdef HAVE_SSTREAM
+# include &lt;sstream&gt;
+#else
+# include &lt;strstream&gt;
+#endif
+
+#ifdef HAVE_SSTREAM
+ std::ostringstream oss;
+#else
+ std::ostrstream oss;
+#endif
+
+oss &lt;&lt; <quote>Name=</quote> &lt;&lt; m_name &lt;&lt; <quote>, number=</quote> &lt;&lt; m_number &lt;&lt; std::endl;
+...
+#ifndef HAVE_SSTREAM
+ oss &lt;&lt; std::ends; // terminate the char*-string
+#endif
+
+// str() returns char* for ostrstream and a string for ostringstream
+// this also causes ostrstream to think that the buffer's memory
+// is yours
+m_label.set_text(oss.str());
+#ifndef HAVE_SSTREAM
+ // let the ostrstream take care of freeing the memory
+ oss.freeze(false);
+#endif
+</programlisting>
+
+<para>
+ Input-stringstreams can be used similarly:
+</para>
+
+<programlisting>
+std::string input;
+...
+#ifdef HAVE_SSTREAM
+std::istringstream iss(input);
+#else
+std::istrstream iss(input.c_str());
+#endif
+
+int i;
+iss &gt;&gt; i;
+</programlisting>
+
+<para> One (the only?) restriction is that an istrstream cannot be re-filled:
+</para>
+
+<programlisting>
+std::istringstream iss(numerator);
+iss &gt;&gt; m_num;
+// this is not possible with istrstream
+iss.clear();
+iss.str(denominator);
+iss &gt;&gt; m_den;
+</programlisting>
+
+<para>
+If you don't care about speed, you can put these conversions in
+ a template-function:
+</para>
+<programlisting>
+template &lt;class X&gt;
+void fromString(const string&amp; input, X&amp; any)
+{
+#ifdef HAVE_SSTREAM
+std::istringstream iss(input);
+#else
+std::istrstream iss(input.c_str());
+#endif
+X temp;
+iss &gt;&gt; temp;
+if (iss.fail())
+throw runtime_error(..)
+any = temp;
+}
+</programlisting>
+
+<para>
+ Another example of using stringstreams is in <link linkend="strings.string.shrink">this howto</link>.
+</para>
+
+<para> There is additional information in the libstdc++-v2 info files, in
+particular <quote>info iostream</quote>.
+</para>
+</section>
+
+<section xml:id="backwards.second.wchar"><info><title>Little or no wide character support</title></info>
+
+ <para>
+ Classes <classname>wstring</classname> and
+ <classname>char_traits&lt;wchar_t&gt;</classname> are
+ not supported.
+ </para>
+</section>
+
+<section xml:id="backwards.second.iostream_templates"><info><title>No templatized iostreams</title></info>
+
+ <para>
+ Classes <classname>wfilebuf</classname> and
+ <classname>wstringstream</classname> are not supported.
+ </para>
+</section>
+
+<section xml:id="backwards.second.thread_safety"><info><title>Thread safety issues</title></info>
+
+
+ <para>
+ 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
+ command-line options and macros (both of which were somewhat
+ thread-implementation and port-specific). There were no
+ guarantees related to being able to link code compiled with one
+ set of options and macro setting with another set.
+ </para>
+
+ <para>
+ For GCC 3.0, configuration of the threading model used with
+ libraries and user-code is performed when GCC is configured and
+ built using the --enable-threads and --disable-threads options.
+ The ABI is stable for symbol name-mangling and limited functional
+ compatibility exists between code compiled under different
+ threading models.
+ </para>
+
+ <para>
+ The libstdc++ library has been designed so that it can be used in
+ multithreaded applications (with libstdc++-v2 this was only true
+ of the STL parts.) The first problem is finding a
+ <emphasis>fast</emphasis> method of implementation portable to
+ all platforms. Due to historical reasons, some of the library is
+ written against per-CPU-architecture spinlocks and other parts
+ 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">same
+ definition that SGI</link> 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
+ will be used in the next version of the C++ standard library.
+ </para>
+
+ <para>
+ Here is a small link farm to threads (no pun) in the mail
+ archives that discuss the threading problem. Each link is to the
+ 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.
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Our threading expert Loren gives a breakdown of <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
+ six situations involving threads</link> for the 3.0
+ release series.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
+ This message</link> inspired a recent updating of issues with
+ threading and the SGI STL library. It also contains some
+ example POSIX-multithreaded STL code.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ (A large selection of links to older messages has been removed;
+ many of the messages from 1999 were lost in a disk crash, and the
+ 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.)
+ </para>
+</section>
+
+</section>
+
+<section xml:id="backwards.third"><info><title>Third</title></info>
+
+
+<para> The third generation GNU C++ library is called libstdc++, or
+libstdc++-v3.
+</para>
+
+ <para>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.
+ </para>
+
+ <para>A more formal description of the V3 goals can be found in the
+ official <link linkend="contrib.design_notes">design document</link>.
+ </para>
+
+<para>Portability notes and known implementation limitations are as follows.</para>
+
+<section xml:id="backwards.third.headers"><info><title>Pre-ISO headers moved to backwards or removed</title></info>
+
+
+<para> The pre-ISO C++ headers
+ (<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>
+
+ <para>This compatibility layer is constructed by including the
+ standard C++ headers, and injecting any items in
+ <code>std::</code> into the global namespace.
+ </para>
+ <para>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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4">item
+ [27.4]</link>.
+ </para>
+
+<para> Some include adjustment may be required. What follows is an
+autoconf test that defines <code>PRE_STDCXX_HEADERS</code> when they
+exist.</para>
+
+<programlisting>
+# AC_HEADER_PRE_STDCXX
+AC_DEFUN([AC_HEADER_PRE_STDCXX], [
+ AC_CACHE_CHECK(for pre-ISO C++ include files,
+ ac_cv_cxx_pre_stdcxx,
+ [AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Wno-deprecated"
+
+ # Omit defalloc.h, as compilation with newer compilers is problematic.
+ AC_TRY_COMPILE([
+ #include &lt;new.h&gt;
+ #include &lt;iterator.h&gt;
+ #include &lt;alloc.h&gt;
+ #include &lt;set.h&gt;
+ #include &lt;hashtable.h&gt;
+ #include &lt;hash_set.h&gt;
+ #include &lt;fstream.h&gt;
+ #include &lt;tempbuf.h&gt;
+ #include &lt;istream.h&gt;
+ #include &lt;bvector.h&gt;
+ #include &lt;stack.h&gt;
+ #include &lt;rope.h&gt;
+ #include &lt;complex.h&gt;
+ #include &lt;ostream.h&gt;
+ #include &lt;heap.h&gt;
+ #include &lt;iostream.h&gt;
+ #include &lt;function.h&gt;
+ #include &lt;multimap.h&gt;
+ #include &lt;pair.h&gt;
+ #include &lt;stream.h&gt;
+ #include &lt;iomanip.h&gt;
+ #include &lt;slist.h&gt;
+ #include &lt;tree.h&gt;
+ #include &lt;vector.h&gt;
+ #include &lt;deque.h&gt;
+ #include &lt;multiset.h&gt;
+ #include &lt;list.h&gt;
+ #include &lt;map.h&gt;
+ #include &lt;algobase.h&gt;
+ #include &lt;hash_map.h&gt;
+ #include &lt;algo.h&gt;
+ #include &lt;queue.h&gt;
+ #include &lt;streambuf.h&gt;
+ ],,
+ ac_cv_cxx_pre_stdcxx=yes, ac_cv_cxx_pre_stdcxx=no)
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_pre_stdcxx" = yes; then
+ AC_DEFINE(PRE_STDCXX_HEADERS,,[Define if pre-ISO C++ header files are present. ])
+ fi
+])
+</programlisting>
+
+<para>Porting between pre-ISO headers and ISO headers is simple: headers
+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 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 <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">&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 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>
+ namespaces, instead they are declared in the <code>__gnu_cxx</code>
+ namespace. For maximum portability, consider defining a namespace
+ alias to use to talk about extensions, e.g.:
+ </para>
+ <programlisting>
+ #ifdef __GNUC__
+ #if __GNUC__ &lt; 3
+ #include &lt;hash_map.h&gt;
+ namespace extension { using ::hash_map; }; // inherit globals
+ #else
+ #include &lt;backward/hash_map&gt;
+ #if __GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ == 0
+ namespace extension = std; // GCC 3.0
+ #else
+ namespace extension = ::__gnu_cxx; // GCC 3.1 and later
+ #endif
+ #endif
+ #else // ... there are other compilers, right?
+ namespace extension = std;
+ #endif
+
+ extension::hash_map&lt;int,int&gt; my_map;
+ </programlisting>
+ <para>This is a bit cleaner than defining typedefs for all the
+ instantiations you might need.
+ </para>
+
+
+<para>The following autoconf tests check for working HP/SGI hash containers.
+</para>
+
+<programlisting>
+# AC_HEADER_EXT_HASH_MAP
+AC_DEFUN([AC_HEADER_EXT_HASH_MAP], [
+ AC_CACHE_CHECK(for ext/hash_map,
+ ac_cv_cxx_ext_hash_map,
+ [AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror"
+ AC_TRY_COMPILE([#include &lt;ext/hash_map&gt;], [using __gnu_cxx::hash_map;],
+ ac_cv_cxx_ext_hash_map=yes, ac_cv_cxx_ext_hash_map=no)
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_ext_hash_map" = yes; then
+ AC_DEFINE(HAVE_EXT_HASH_MAP,,[Define if ext/hash_map is present. ])
+ fi
+])
+</programlisting>
+
+<programlisting>
+# AC_HEADER_EXT_HASH_SET
+AC_DEFUN([AC_HEADER_EXT_HASH_SET], [
+ AC_CACHE_CHECK(for ext/hash_set,
+ ac_cv_cxx_ext_hash_set,
+ [AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror"
+ AC_TRY_COMPILE([#include &lt;ext/hash_set&gt;], [using __gnu_cxx::hash_set;],
+ ac_cv_cxx_ext_hash_set=yes, ac_cv_cxx_ext_hash_set=no)
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_ext_hash_set" = yes; then
+ AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ])
+ fi
+])
+</programlisting>
+</section>
+
+<section xml:id="backwards.third.nocreate_noreplace"><info><title>No <code>ios::nocreate/ios::noreplace</code>.
+</title></info>
+
+
+<para> The existence of <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
+it can be left out for input-streams.
+</para>
+
+<para>For output streams, <quote>nocreate</quote> is probably the default,
+unless you specify <code>std::ios::trunc</code> ? To be safe, you can
+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>app</code>, <code>ate</code>
+and <code>trunc</code> (except for <code>app</code> ?).
+</para>
+</section>
+
+<section xml:id="backwards.third.streamattach"><info><title>
+No <code>stream::attach(int fd)</code>
+</title></info>
+
+
+<para>
+ Phil Edwards writes: It was considered and rejected for the ISO
+ standard. Not all environments use file descriptors. Of those
+ that do, not all of them use integers to represent them.
+ </para>
+
+<para>
+ For a portable solution (among systems which use
+ file descriptors), you need to implement a subclass of
+ <code>std::streambuf</code> (or
+ <code>std::basic_streambuf&lt;..&gt;</code>) which opens a file
+ given a descriptor, and then pass an instance of this to the
+ stream-constructor.
+ </para>
+
+<para>
+ An extension is available that implements this.
+ <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.
+ </para>
+
+<para>
+ For another example of this, refer to
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.josuttis.com/cppcode/fdstream.html">fdstream example</link>
+ by Nicolai Josuttis.
+</para>
+</section>
+
+<section xml:id="backwards.third.support_cxx98"><info><title>
+Support for C++98 dialect.
+</title></info>
+
+
+<para>Check for complete library coverage of the C++1998/2003 standard.
+</para>
+
+<programlisting>
+# AC_HEADER_STDCXX_98
+AC_DEFUN([AC_HEADER_STDCXX_98], [
+ AC_CACHE_CHECK(for ISO C++ 98 include files,
+ ac_cv_cxx_stdcxx_98,
+ [AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([
+ #include &lt;cassert&gt;
+ #include &lt;cctype&gt;
+ #include &lt;cerrno&gt;
+ #include &lt;cfloat&gt;
+ #include &lt;ciso646&gt;
+ #include &lt;climits&gt;
+ #include &lt;clocale&gt;
+ #include &lt;cmath&gt;
+ #include &lt;csetjmp&gt;
+ #include &lt;csignal&gt;
+ #include &lt;cstdarg&gt;
+ #include &lt;cstddef&gt;
+ #include &lt;cstdio&gt;
+ #include &lt;cstdlib&gt;
+ #include &lt;cstring&gt;
+ #include &lt;ctime&gt;
+
+ #include &lt;algorithm&gt;
+ #include &lt;bitset&gt;
+ #include &lt;complex&gt;
+ #include &lt;deque&gt;
+ #include &lt;exception&gt;
+ #include &lt;fstream&gt;
+ #include &lt;functional&gt;
+ #include &lt;iomanip&gt;
+ #include &lt;ios&gt;
+ #include &lt;iosfwd&gt;
+ #include &lt;iostream&gt;
+ #include &lt;istream&gt;
+ #include &lt;iterator&gt;
+ #include &lt;limits&gt;
+ #include &lt;list&gt;
+ #include &lt;locale&gt;
+ #include &lt;map&gt;
+ #include &lt;memory&gt;
+ #include &lt;new&gt;
+ #include &lt;numeric&gt;
+ #include &lt;ostream&gt;
+ #include &lt;queue&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;typeinfo&gt;
+ #include &lt;utility&gt;
+ #include &lt;valarray&gt;
+ #include &lt;vector&gt;
+ ],,
+ ac_cv_cxx_stdcxx_98=yes, ac_cv_cxx_stdcxx_98=no)
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_stdcxx_98" = yes; then
+ AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ])
+ fi
+])
+</programlisting>
+</section>
+
+<section xml:id="backwards.third.support_tr1"><info><title>
+Support for C++TR1 dialect.
+</title></info>
+
+
+<para>Check for library coverage of the TR1 standard.
+</para>
+
+<programlisting>
+# AC_HEADER_STDCXX_TR1
+AC_DEFUN([AC_HEADER_STDCXX_TR1], [
+ AC_CACHE_CHECK(for ISO C++ TR1 include files,
+ ac_cv_cxx_stdcxx_tr1,
+ [AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([
+ #include &lt;tr1/array&gt;
+ #include &lt;tr1/ccomplex&gt;
+ #include &lt;tr1/cctype&gt;
+ #include &lt;tr1/cfenv&gt;
+ #include &lt;tr1/cfloat&gt;
+ #include &lt;tr1/cinttypes&gt;
+ #include &lt;tr1/climits&gt;
+ #include &lt;tr1/cmath&gt;
+ #include &lt;tr1/complex&gt;
+ #include &lt;tr1/cstdarg&gt;
+ #include &lt;tr1/cstdbool&gt;
+ #include &lt;tr1/cstdint&gt;
+ #include &lt;tr1/cstdio&gt;
+ #include &lt;tr1/cstdlib&gt;
+ #include &lt;tr1/ctgmath&gt;
+ #include &lt;tr1/ctime&gt;
+ #include &lt;tr1/cwchar&gt;
+ #include &lt;tr1/cwctype&gt;
+ #include &lt;tr1/functional&gt;
+ #include &lt;tr1/memory&gt;
+ #include &lt;tr1/random&gt;
+ #include &lt;tr1/regex&gt;
+ #include &lt;tr1/tuple&gt;
+ #include &lt;tr1/type_traits&gt;
+ #include &lt;tr1/unordered_set&gt;
+ #include &lt;tr1/unordered_map&gt;
+ #include &lt;tr1/utility&gt;
+ ],,
+ ac_cv_cxx_stdcxx_tr1=yes, ac_cv_cxx_stdcxx_tr1=no)
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_stdcxx_tr1" = yes; then
+ AC_DEFINE(STDCXX_TR1_HEADERS,,[Define if ISO C++ TR1 header files are present. ])
+ fi
+])
+</programlisting>
+
+<para>An alternative is to check just for specific TR1 includes, such as &lt;unordered_map&gt; and &lt;unordered_set&gt;.
+</para>
+
+<programlisting>
+# AC_HEADER_TR1_UNORDERED_MAP
+AC_DEFUN([AC_HEADER_TR1_UNORDERED_MAP], [
+ AC_CACHE_CHECK(for tr1/unordered_map,
+ ac_cv_cxx_tr1_unordered_map,
+ [AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([#include &lt;tr1/unordered_map&gt;], [using std::tr1::unordered_map;],
+ ac_cv_cxx_tr1_unordered_map=yes, ac_cv_cxx_tr1_unordered_map=no)
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_tr1_unordered_map" = yes; then
+ AC_DEFINE(HAVE_TR1_UNORDERED_MAP,,[Define if tr1/unordered_map is present. ])
+ fi
+])
+</programlisting>
+
+<programlisting>
+# AC_HEADER_TR1_UNORDERED_SET
+AC_DEFUN([AC_HEADER_TR1_UNORDERED_SET], [
+ AC_CACHE_CHECK(for tr1/unordered_set,
+ ac_cv_cxx_tr1_unordered_set,
+ [AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([#include &lt;tr1/unordered_set&gt;], [using std::tr1::unordered_set;],
+ ac_cv_cxx_tr1_unordered_set=yes, ac_cv_cxx_tr1_unordered_set=no)
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_tr1_unordered_set" = yes; then
+ AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ])
+ fi
+])
+</programlisting>
+</section>
+
+
+<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++11 standard.
+</para>
+
+<programlisting>
+# 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 final
+ {
+ static constexpr T value{ __cplusplus };
+ };
+
+ typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
+
+ int a;
+ decltype(a) b;
+
+ typedef check&lt;int&gt; check_type;
+ 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++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++11"
+ AC_TRY_COMPILE([
+ template &lt;typename T&gt;
+ struct check final
+ {
+ static constexpr T value{ __cplusplus };
+ };
+
+ typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
+
+ int a;
+ decltype(a) b;
+
+ typedef check&lt;int&gt; check_type;
+ 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++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++11"
+ AC_TRY_COMPILE([
+ template &lt;typename T&gt;
+ struct check final
+ {
+ static constexpr T value{ __cplusplus };
+ };
+
+ typedef check&lt;check&lt;bool&gt;&gt; right_angle_brackets;
+
+ int a;
+ decltype(a) b;
+
+ typedef check&lt;int&gt; check_type;
+ 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_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++2011 standard.
+ (Some library headers are commented out in this check, they are
+ not currently provided by libstdc++).
+</para>
+
+<programlisting>
+# 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++11"
+
+ AC_TRY_COMPILE([
+ #include &lt;cassert&gt;
+ #include &lt;ccomplex&gt;
+ #include &lt;cctype&gt;
+ #include &lt;cerrno&gt;
+ #include &lt;cfenv&gt;
+ #include &lt;cfloat&gt;
+ #include &lt;cinttypes&gt;
+ #include &lt;ciso646&gt;
+ #include &lt;climits&gt;
+ #include &lt;clocale&gt;
+ #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;
+ #include &lt;cstdint&gt;
+ #include &lt;cstdio&gt;
+ #include &lt;cstdlib&gt;
+ #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;
+ #include &lt;iostream&gt;
+ #include &lt;istream&gt;
+ #include &lt;iterator&gt;
+ #include &lt;limits&gt;
+ #include &lt;list&gt;
+ #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;
+ #include &lt;unordered_set&gt;
+ #include &lt;utility&gt;
+ #include &lt;valarray&gt;
+ #include &lt;vector&gt;
+ ],,
+ 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_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
+<filename class="headerfile">&lt;unordered_map&gt;</filename>
+</para>
+
+<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_11])
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ 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"
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_unordered_map" = yes; then
+ AC_DEFINE(HAVE_UNORDERED_MAP,,[Define if unordered_map is present. ])
+ fi
+])
+</programlisting>
+
+<programlisting>
+# AC_HEADER_UNORDERED_SET
+AC_DEFUN([AC_HEADER_UNORDERED_SET], [
+ AC_CACHE_CHECK(for unordered_set,
+ ac_cv_cxx_unordered_set,
+ [AC_REQUIRE([AC_COMPILE_STDCXX_11])
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ 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"
+ AC_LANG_RESTORE
+ ])
+ if test "$ac_cv_cxx_unordered_set" = yes; then
+ AC_DEFINE(HAVE_UNORDERED_SET,,[Define if unordered_set is present. ])
+ 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 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 older versions. Now, most
+ <type>iterator_type</type> typedefs in container classes are POD
+ objects, not <type>value_type</type> pointers.
+</para>
+</section>
+
+</section>
+
+<bibliography xml:id="backwards.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.kegel.com/gcc/gcc4.html">
+ Migrating to GCC 4.1
+ </link>
+ </title>
+
+ <author><personname><firstname>Dan</firstname><surname>Kegel</surname></personname></author>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+ <author><personname><firstname>Martin</firstname><surname>Michlmayr</surname></personname></author>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ </biblioentry>
+
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
new file mode 100644
index 000000000..145016267
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
@@ -0,0 +1,558 @@
+<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>The bitmap_allocator</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>allocator</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+</para>
+
+<section xml:id="allocator.bitmap.design"><info><title>Design</title></info>
+
+
+ <para>
+ As this name suggests, this allocator uses a bit-map to keep track
+ of the used and unused memory locations for its book-keeping
+ purposes.
+ </para>
+ <para>
+ This allocator will make use of 1 single bit to keep track of
+ whether it has been allocated or not. A bit 1 indicates free,
+ while 0 indicates allocated. This has been done so that you can
+ easily check a collection of bits for a free block. This kind of
+ Bitmapped strategy works best for single object allocations, and
+ with the STL type parameterized allocators, we do not need to
+ choose any size for the block which will be represented by a
+ single bit. This will be the size of the parameter around which
+ the allocator has been parameterized. Thus, close to optimal
+ performance will result. Hence, this should be used for node based
+ containers which call the allocate function with an argument of 1.
+ </para>
+
+ <para>
+ The bitmapped allocator's internal pool is exponentially growing.
+ Meaning that internally, the blocks acquired from the Free List
+ Store will double every time the bitmapped allocator runs out of
+ memory.
+ </para>
+
+ <para>
+ The macro <literal>__GTHREADS</literal> decides whether to use
+ Mutex Protection around every allocation/deallocation. The state
+ of the macro is picked up automatically from the gthr abstraction
+ layer.
+ </para>
+
+</section>
+
+<section xml:id="allocator.bitmap.impl"><info><title>Implementation</title></info>
+<?dbhtml filename="bitmap_allocator_impl.html"?>
+
+
+<section xml:id="bitmap.impl.free_list_store" xreflabel="Free List Store"><info><title>Free List Store</title></info>
+
+
+ <para>
+ 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.
+ </para>
+ <para>
+ 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.
+ </para>
+ <para>
+ 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.
+ </para>
+ <para>
+ 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.
+ </para>
+
+<orderedlist>
+ <listitem><para>Equal size check. Return true only when the 2 blocks are of equal
+size.</para></listitem>
+ <listitem><para>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. </para></listitem>
+ <listitem><para>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.</para></listitem>
+</orderedlist>
+
+ <para>
+ Currently, (3) is being used with a value of 36% Maximum wastage per
+ Super Block.
+ </para>
+</section>
+
+<section xml:id="bitmap.impl.super_block" xreflabel="Super Block"><info><title>Super Block</title></info>
+
+
+ <para>
+ 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.
+ </para>
+ <para>
+ How does it interact with the free list store?
+ </para>
+ <para>
+ 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.
+ </para>
+</section>
+
+<section xml:id="bitmap.impl.super_block_data" xreflabel="Super Block Data"><info><title>Super Block Data Layout</title></info>
+
+ <para>
+ 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.
+ </para>
+ <para>
+ 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.
+ </para>
+ <para>
+ 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).
+ </para>
+
+<table frame="all">
+<title>Bitmap Allocator Memory Map</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+
+<tbody>
+ <row>
+ <entry>268</entry>
+ <entry>0</entry>
+ <entry>4294967295</entry>
+ <entry>4294967295</entry>
+ <entry>Data -&gt; Space for 64 ints</entry>
+ </row>
+</tbody>
+</tgroup>
+</table>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ What do the remaining values represent?</para>
+ <para>
+ 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.
+ </para>
+ <para>
+ The value 4294967295 represents the integer corresponding to the bit
+ representation of all bits set: 11111111111111111111111111111111.
+ </para>
+ <para>
+ 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).
+ </para>
+</section>
+
+<section xml:id="bitmap.impl.max_wasted" xreflabel="Max Wasted Percentage"><info><title>Maximum Wasted Percentage</title></info>
+
+
+ <para>
+ 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.
+ </para>
+ <para>
+ The formula for calculating the maximum wastage as a percentage:
+ </para>
+
+ <para>
+(32 x k + 1) / (2 x (32 x k + 1 + 32 x c)) x 100.
+ </para>
+
+ <para>
+ 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.
+ </para>
+ <para>
+ Plugging-in: For List: k = 8 and c = 4 (int and double), we get:
+ 33.376%
+ </para>
+
+ <para>
+For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%
+ </para>
+ <para>
+ 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.
+ </para>
+
+</section>
+
+<section xml:id="bitmap.impl.allocate" xreflabel="Allocate"><info><title><function>allocate</function></title></info>
+
+
+ <para>
+ 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.
+ </para>
+ <para>
+ Suppose n == 1, then the allocator does the following:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ 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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Is there any block in whatever region of memory that we own
+ free? This is done by checking
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ The use count for each super block, and if that fails then
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The individual bit-maps for each super block.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ 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).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ This process involves Refilling the internal exponentially
+ growing memory pool. The said effect is achieved by calling
+ _S_refill_pool which does the following:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Gets more memory from the Global Free List of the Required
+ size.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Adjusts the size for the next call to itself.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Writes the appropriate headers in the bit-maps.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Sets the use count for that super-block just allocated to 0
+ (zero).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 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.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</orderedlist>
+
+<para>
+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.
+</para>
+
+</section>
+
+<section xml:id="bitmap.impl.deallocate" xreflabel="Deallocate"><info><title><function>deallocate</function></title></info>
+
+ <para>
+ 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.
+ </para>
+ <para>
+ However for n == 1, a series of steps are performed:
+ </para>
+
+ <orderedlist>
+ <listitem><para>
+ 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.
+ </para></listitem>
+ <listitem><para>
+ 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.
+ </para></listitem>
+ </orderedlist>
+
+ <para>
+ 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.
+ </para>
+</section>
+
+<section xml:id="bitmap.impl.questions" xreflabel="Questions"><info><title>Questions</title></info>
+
+
+ <section xml:id="bitmap.impl.question.1" xreflabel="Question 1"><info><title>1</title></info>
+
+ <para>
+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?
+ </para>
+ <para>
+ 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.
+ </para>
+ </section>
+
+ <section xml:id="bitmap.impl.question.2" xreflabel="Question 2"><info><title>2</title></info>
+
+ <para>
+ 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?
+ </para>
+ <para>
+ 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.
+ </para>
+ </section>
+
+ <section xml:id="bitmap.impl.question.3" xreflabel="Question 3"><info><title>3</title></info>
+
+ <para>
+ How do the allocate and deallocate functions work in regard to
+ bitmaps?
+ </para>
+ <para>
+ 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.
+ </para>
+ <para>
+ e.g.: Consider a bit-map of 64-bits as represented below:
+ 1111111111111111111111111111111111111111111111111111111111111111
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ The bit-map now looks like this:
+ 1111111111111111111111111111111111111111111111111111111111111110
+ </para>
+ </section>
+</section>
+
+<section xml:id="bitmap.impl.locality" xreflabel="Locality"><info><title>Locality</title></info>
+
+ <para>
+ 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.
+ </para>
+
+ <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 its
+equivalent.</para></listitem>
+ <listitem><para>And also this would preserve the cache as far as possible.</para></listitem>
+ </orderedlist>
+
+ <para>
+ 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.
+ </para>
+</section>
+
+<section xml:id="bitmap.impl.grow_policy" xreflabel="Grow Policy"><info><title>Overhead and Grow Policy</title></info>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ 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.
+ </para>
+</section>
+
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/build_hacking.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/build_hacking.xml
new file mode 100644
index 000000000..917b4d258
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/build_hacking.xml
@@ -0,0 +1,471 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.build_hacking" xreflabel="Build Hacking">
+<?dbhtml filename="build_hacking.html"?>
+
+<info><title>Configure and Build Hacking</title>
+ <keywordset>
+ <keyword>C++</keyword>
+ <keyword>build</keyword>
+ <keyword>configure</keyword>
+ <keyword>hacking</keyword>
+ <keyword>version</keyword>
+ <keyword>dynamic</keyword>
+ <keyword>shared</keyword>
+ </keywordset>
+</info>
+
+<section xml:id="build_hacking.prereq"><info><title>Prerequisites</title></info>
+
+ <para>
+ As noted <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/prerequisites.html">previously</link>,
+ certain other tools are necessary for hacking on files that
+ control configure (<code>configure.ac</code>,
+ <code>acinclude.m4</code>) and make
+ (<code>Makefile.am</code>). These additional tools
+ (<code>automake</code>, and <code>autoconf</code>) are further
+ described in detail in their respective manuals. All the libraries
+ 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.
+ </para>
+</section>
+
+<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" scale="75" fileref="../images/confdeps.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100" fileref="../images/confdeps.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Dependency Graph for Configure and Build Files</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ Regenerate all generated files by using the command
+ <code>autoreconf</code> at the top level of the libstdc++ source
+ directory.
+ </para>
+</section>
+
+</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>
+ 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
+ mess like crossconfig.m4.
+ </para>
+
+ <para>
+ Wouldn't it be nice if we could store that information in files
+ like configure.host, which can be modified without needing to
+ regenerate anything, and can even be tweaked without really
+ knowing how the configury all works? Perhaps break the pieces of
+ crossconfig.m4 out and place them in their appropriate
+ config/{cpu,os} directory.
+ </para>
+
+ <para>
+ Alas, writing macros like
+ "<code>AC_DEFINE(HAVE_A_NICE_DAY)</code>" can only be done inside
+ files which are passed through autoconf. Files which are pure
+ shell script can be source'd at configure time. Files which
+ contain autoconf macros must be processed with autoconf. We could
+ still try breaking the pieces out into "config/*/cross.m4" bits,
+ for instance, but then we would need arguments to aclocal/autoconf
+ to properly find them all when generating configure. I would
+ discourage that.
+</para>
+</section>
+
+<section xml:id="build_hacking.configure.conventions"><info><title>Coding and Commenting Conventions</title></info>
+
+
+ <para>
+ 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
+ .m4 files should. About the only comments which should
+ <emphasis>not</emphasis> use #, but use dnl instead, are comments
+ <emphasis>outside</emphasis> our own macros in the ancilliary
+ files. The difference is that # comments show up in
+ <code>configure</code> (which is most helpful for debugging),
+ while dnl'd lines just vanish. Since the macros in ancilliary
+ files generate code which appears in odd places, their "outside"
+ comments tend to not be useful while reading
+ <code>configure</code>.
+ </para>
+
+ <para>
+ Do not use any <code>$target*</code> variables, such as
+ <code>$target_alias</code>. The single exception is in
+ configure.ac, for automake+dejagnu's sake.
+ </para>
+</section>
+
+<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
+ actually performed/called/expanded/whatever here, just loaded. So
+ we can arrange the contents however we like. As of this writing,
+ acinclude.m4 is arranged as follows:
+ </para>
+ <programlisting>
+ GLIBCXX_CHECK_HOST
+ GLIBCXX_TOPREL_CONFIGURE
+ GLIBCXX_CONFIGURE
+ </programlisting>
+ <para>
+ All the major variable "discovery" is done here. CXX, multilibs,
+ etc.
+ </para>
+ <programlisting>
+ fragments included from elsewhere
+ </programlisting>
+ <para>
+ Right now, "fragments" == "the math/linkage bits".
+ </para>
+<programlisting>
+ GLIBCXX_CHECK_COMPILER_FEATURES
+ GLIBCXX_CHECK_LINKER_FEATURES
+ GLIBCXX_CHECK_WCHAR_T_SUPPORT
+</programlisting>
+<para>
+ Next come extra compiler/linker feature tests. Wide character
+ support was placed here because I couldn't think of another place
+ for it. It will probably get broken apart like the math tests,
+ because we're still disabling wchars on systems which could actually
+ support them.
+</para>
+<programlisting>
+ GLIBCXX_CHECK_SETRLIMIT_ancilliary
+ GLIBCXX_CHECK_SETRLIMIT
+ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
+ GLIBCXX_CHECK_POLL
+ GLIBCXX_CHECK_WRITEV
+
+ GLIBCXX_CONFIGURE_TESTSUITE
+</programlisting>
+<para>
+ Feature tests which only get used in one place. Here, things used
+ only in the testsuite, plus a couple bits used in the guts of I/O.
+</para>
+<programlisting>
+ GLIBCXX_EXPORT_INCLUDES
+ GLIBCXX_EXPORT_FLAGS
+ GLIBCXX_EXPORT_INSTALL_INFO
+</programlisting>
+<para>
+ Installation variables, multilibs, working with the rest of the
+ compiler. Many of the critical variables used in the makefiles are
+ set here.
+</para>
+<programlisting>
+ GLIBGCC_ENABLE
+ GLIBCXX_ENABLE_C99
+ GLIBCXX_ENABLE_CHEADERS
+ GLIBCXX_ENABLE_CLOCALE
+ GLIBCXX_ENABLE_CONCEPT_CHECKS
+ GLIBCXX_ENABLE_CSTDIO
+ GLIBCXX_ENABLE_CXX_FLAGS
+ GLIBCXX_ENABLE_C_MBCHAR
+ GLIBCXX_ENABLE_DEBUG
+ GLIBCXX_ENABLE_DEBUG_FLAGS
+ GLIBCXX_ENABLE_LONG_LONG
+ GLIBCXX_ENABLE_PCH
+ GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
+ GLIBCXX_ENABLE_SYMVERS
+ GLIBCXX_ENABLE_THREADS
+</programlisting>
+<para>
+ All the features which can be controlled with enable/disable
+ configure options. Note how they're alphabetized now? Keep them
+ like that. :-)
+</para>
+<programlisting>
+ AC_LC_MESSAGES
+ libtool bits
+</programlisting>
+<para>
+ Things which we don't seem to use directly, but just has to be
+ present otherwise stuff magically goes wonky.
+</para>
+
+</section>
+
+<section xml:id="build_hacking.configure.enable"><info><title><constant>GLIBCXX_ENABLE</constant>, the <literal>--enable</literal> maker</title></info>
+
+
+ <para>
+ 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 <literal>AC_ARG_ENABLE</literal> macro, with --help text
+ properly quoted and aligned. (Death to changequote!)
+ </para>
+ </listitem>
+ <listitem>
+ <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 <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.
+ </para>
+ </listitem>
+</orderedlist>
+
+<para>Doing these things correctly takes some extra autoconf/autom4te code,
+ which made our macros nearly illegible. So all the ugliness is factored
+ out into this one helper macro.
+</para>
+
+<para>Many of the macros take an argument, passed from when they are expanded
+ in configure.ac. The argument controls the default value of the
+ enable/disable switch. Previously, the arguments themselves had defaults.
+ Now they don't, because that's extra complexity with zero gain for us.
+</para>
+
+<para>There are three "overloaded signatures". When reading the descriptions
+ below, keep in mind that the brackets are autoconf's quotation characters,
+ and that they will be stripped. Examples of just about everything occur
+ in acinclude.m4, if you want to look.
+</para>
+
+<programlisting>
+ 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)
+</programlisting>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ 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:
+ <code>[extra-foo]</code>, controlled by the --enable-extra-foo
+ option and stored in $enable_extra_foo.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ DEFAULT is the value to store in $enable_FEATURE if the user does
+ 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 <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
+ <literal>GLIBCXX_ENABLE_CLOCALE</literal> for an example).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ HELP-ARG is any text to append to the option string itself in the
+ --help output. Examples: <code>[]</code> (i.e., an empty string,
+ which appends nothing), <code>[=BAR]</code>, which produces
+ <code>--enable-extra-foo=BAR</code>, and
+ <code>[@&lt;:@=BAR@:&gt;@]</code>, which produces
+ <code>--enable-extra-foo[=BAR]</code>. See the difference? See
+ what it implies to the user?
+ </para>
+ <para>
+ 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/software/autoconf/manual/autoconf.html#Quadrigraphs"><emphasis>quadrigraphs</emphasis></link>
+ and you should use them whenever necessary.
+ </para>
+ </listitem>
+ <listitem>
+ <para>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
+ GLIBCXX_ENABLE. By convention, these are not full English
+ sentences. Example: [turn on extra foo]
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ With no other arguments, only the standard autoconf patterns are
+ allowed: "<code>--{enable,disable}-foo[={yes,no}]</code>" The
+ $enable_FEATURE variable is guaranteed to equal either "yes" or "no"
+ after the macro. If the user tries to pass something else, an
+ explanatory error message will be given, and configure will halt.
+</para>
+
+<para>
+ The second signature takes a fifth argument, "<code>[permit
+ a | b | c | ...]</code>"
+ This allows <emphasis>a</emphasis> or <emphasis>b</emphasis> or
+ ... after the equals sign in the option, and $enable_FEATURE is
+ guaranteed to equal one of them after the macro. Note that if you
+ want to allow plain --enable/--disable with no "=whatever", you must
+ include "yes" and "no" in the list of permitted values. Also note
+ that whatever you passed as DEFAULT must be in the list. If the
+ user tries to pass something not on the list, a semi-explanatory
+ error message will be given, and configure will halt. Example:
+ <code>[permit generic|gnu|ieee_1003.1-2001|yes|no|auto]</code>
+</para>
+
+<para>
+ The third signature takes a fifth argument. It is arbitrary shell
+ code to execute if the user actually passes the enable/disable
+ option. (If the user does not, the default is used. Duh.) No
+ argument checking at all is done in this signature. See
+ GLIBCXX_ENABLE_CXX_FLAGS for an example of handling, and an error
+ message.
+</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/gcc-4.8.3/libstdc++-v3/doc/xml/manual/codecvt.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/codecvt.xml
new file mode 100644
index 000000000..9961515d4
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/codecvt.xml
@@ -0,0 +1,676 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.localization.facet.codecvt" xreflabel="codecvt">
+<?dbhtml filename="codecvt.html"?>
+
+<info><title>codecvt</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>codecvt</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+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
+characters (hereafter referred to as wchar_t) and the standard type
+char that is so beloved in classic <quote>C</quote> (which can now be
+referred to as narrow characters.) This document attempts to describe
+how the GNU libstdc++ implementation deals with the conversion between
+wide and narrow characters, and also presents a framework for dealing
+with the huge number of other encodings that iconv can convert,
+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.
+</para>
+
+<section xml:id="facet.codecvt.req"><info><title>Requirements</title></info>
+
+
+<para>
+Around page 425 of the C++ Standard, this charming heading comes into view:
+</para>
+
+<blockquote>
+<para>
+22.2.1.5 - Template class codecvt
+</para>
+</blockquote>
+
+<para>
+The text around the codecvt definition gives some clues:
+</para>
+
+<blockquote>
+<para>
+<emphasis>
+-1- The class codecvt&lt;internT,externT,stateT&gt; is for use when
+converting from one codeset to another, such as from wide characters
+to multibyte characters, between wide character encodings such as
+Unicode and EUC.
+</emphasis>
+</para>
+</blockquote>
+
+<para>
+Hmm. So, in some unspecified way, Unicode encodings and
+translations between other character sets should be handled by this
+class.
+</para>
+
+<blockquote>
+<para>
+<emphasis>
+-2- The stateT argument selects the pair of codesets being mapped between.
+</emphasis>
+</para>
+</blockquote>
+
+<para>
+Ah ha! Another clue...
+</para>
+
+<blockquote>
+<para>
+<emphasis>
+-3- The instantiations required in the Table ??
+(lib.locale.category), namely codecvt&lt;wchar_t,char,mbstate_t&gt; and
+codecvt&lt;char,char,mbstate_t&gt;, convert the implementation-defined
+native character set. codecvt&lt;char,char,mbstate_t&gt; implements a
+degenerate conversion; it does not convert at
+all. codecvt&lt;wchar_t,char,mbstate_t&gt; converts between the native
+character sets for tiny and wide characters. Instantiations on
+mbstate_t perform conversion between encodings known to the library
+implementor. Other encodings can be converted by specializing on a
+user-defined stateT type. The stateT object can contain any state that
+is useful to communicate to or from the specialized do_convert member.
+</emphasis>
+</para>
+</blockquote>
+
+<para>
+At this point, a couple points become clear:
+</para>
+
+<para>
+One: The standard clearly implies that attempts to add non-required
+(yet useful and widely used) conversions need to do so through the
+third template parameter, stateT.</para>
+
+<para>
+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.</para>
+</section>
+
+<section xml:id="facet.codecvt.design"><info><title>Design</title></info>
+
+
+<section xml:id="codecvt.design.wchar_t_size"><info><title><type>wchar_t</type> Size</title></info>
+
+
+ <para>
+ 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
+ internal encoding of Unicode or UCS2. (See AIX, Microsoft NT,
+ Java, others.) Other systems, use a four byte, unsigned integral
+ type to represent wide characters, and use an internal encoding
+ of UCS4. (GNU/Linux systems using glibc, in particular.) The C
+ programming language (and thus C++) does not specify a specific
+ size for the type wchar_t.
+ </para>
+
+ <para>
+ Thus, portable C++ code cannot assume a byte size (or endianness) either.
+ </para>
+ </section>
+
+<section xml:id="codecvt.design.unicode"><info><title>Support for Unicode</title></info>
+
+ <para>
+ 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
+ Unicode strings is pretty widely appreciated. Sadly, this specific
+ encoding (And other useful encodings like UTF8, UCS4, ISO 8859-10,
+ etc etc etc) are not mentioned in the C++ standard.
+ </para>
+
+ <para>
+ A couple of comments:
+ </para>
+
+ <para>
+ The thought that all one needs to convert between two arbitrary
+ codesets is two types and some kind of state argument is
+ unfortunate. In particular, encodings may be stateless. The naming
+ of the third parameter as stateT is unfortunate, as what is really
+ needed is some kind of generalized type that accounts for the
+ issues that abstract encodings will need. The minimum information
+ that is required includes:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ 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
+ X/Open) hosted on the GNU/Linux operating system allows
+ bi-directional mapping between far more than the following
+ tantalizing possibilities:
+ </para>
+
+ <para>
+ (An edited list taken from <code>`iconv --list`</code> on a
+ Red Hat 6.2/Intel system:
+ </para>
+
+<blockquote>
+<programlisting>
+8859_1, 8859_9, 10646-1:1993, 10646-1:1993/UCS4, ARABIC, ARABIC7,
+ASCII, EUC-CN, EUC-JP, EUC-KR, EUC-TW, GREEK-CCIcode, GREEK, GREEK7-OLD,
+GREEK7, GREEK8, HEBREW, ISO-8859-1, ISO-8859-2, ISO-8859-3,
+ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8,
+ISO-8859-9, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14,
+ISO-8859-15, ISO-10646, ISO-10646/UCS2, ISO-10646/UCS4,
+ISO-10646/UTF-8, ISO-10646/UTF8, SHIFT-JIS, SHIFT_JIS, UCS-2, UCS-4,
+UCS2, UCS4, UNICODE, UNICODEBIG, UNICODELIcodeLE, US-ASCII, US, UTF-8,
+UTF-16, UTF8, UTF16).
+</programlisting>
+</blockquote>
+
+<para>
+For iconv-based implementations, string literals for each of the
+encodings (i.e. "UCS-2" and "UTF-8") are necessary,
+although for other,
+non-iconv implementations a table of enumerated values or some other
+mechanism may be required.
+</para>
+</listitem>
+
+<listitem><para>
+ Maximum length of the identifying string literal.
+</para></listitem>
+
+<listitem><para>
+ Some encodings require explicit endian-ness. As such, some kind
+ of endian marker or other byte-order marker will be necessary. See
+ "Footnotes for C/C++ developers" in Haible for more information on
+ UCS-2/Unicode endian issues. (Summary: big endian seems most likely,
+ however implementations, most notably Microsoft, vary.)
+</para></listitem>
+
+<listitem><para>
+ Types representing the conversion state, for conversions involving
+ the machinery in the "C" library, or the conversion descriptor, for
+ conversions using iconv (such as the type iconv_t.) Note that the
+ conversion descriptor encodes more information than a simple encoding
+ state type.
+</para></listitem>
+
+<listitem><para>
+ Conversion descriptors for both directions of encoding. (i.e., both
+ UCS-2 to UTF-8 and UTF-8 to UCS-2.)
+</para></listitem>
+
+<listitem><para>
+ Something to indicate if the conversion requested if valid.
+</para></listitem>
+
+<listitem><para>
+ Something to represent if the conversion descriptors are valid.
+</para></listitem>
+
+<listitem><para>
+ 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.
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="codecvt.design.issues"><info><title>Other Issues</title></info>
+
+<para>
+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;
+when implemented using standard "C" functions.
+</para>
+
+<para>
+Three problems arise, one big, one of medium importance, and one small.
+</para>
+
+<para>
+First, the small: mcsrtombs and wcsrtombs may not be multithread-safe
+on all systems required by the GNU tools. For GNU/Linux and glibc,
+this is not an issue.
+</para>
+
+<para>
+Of medium concern, in the grand scope of things, is that the functions
+used to implement this specialization work on null-terminated
+strings. Buffers, especially file buffers, may not be null-terminated,
+thus giving conversions that end prematurely or are otherwise
+incorrect. Yikes!
+</para>
+
+<para>
+The last, and fundamental problem, is the assumption of a global
+locale for all the "C" functions referenced above. For something like
+C++ iostreams (where codecvt is explicitly used) the notion of
+multiple locales is fundamental. In practice, most users may not run
+into this limitation. However, as a quality of implementation issue,
+the GNU C++ library would like to offer a solution that allows
+multiple locales and or simultaneous usage with computationally
+correct results. In short, libstdc++ is trying to offer, as an
+option, a high-quality implementation, damn the additional complexity!
+</para>
+
+<para>
+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.
+</para>
+
+</section>
+
+</section>
+
+<section xml:id="facet.codecvt.impl"><info><title>Implementation</title></info>
+
+
+<para>
+The two required specializations are implemented as follows:
+</para>
+
+<para>
+<code>
+codecvt&lt;char, char, mbstate_t&gt;
+</code>
+</para>
+<para>
+This is a degenerate (i.e., does nothing) specialization. Implementing
+this was a piece of cake.
+</para>
+
+<para>
+<code>
+codecvt&lt;char, wchar_t, mbstate_t&gt;
+</code>
+</para>
+
+<para>
+This specialization, by specifying all the template parameters, pretty
+much ties the hands of implementors. As such, the implementation is
+straightforward, involving mcsrtombs for the conversions between char
+to wchar_t and wcsrtombs for conversions between wchar_t and char.
+</para>
+
+<para>
+Neither of these two required specializations deals with Unicode
+characters. As such, libstdc++ implements a partial specialization
+of the codecvt class with and iconv wrapper class, encoding_state as the
+third template parameter.
+</para>
+
+<para>
+This implementation should be standards conformant. First of all, the
+standard explicitly points out that instantiations on the third
+template parameter, stateT, are the proper way to implement
+non-required conversions. Second of all, the standard says (in Chapter
+17) that partial specializations of required classes are a-ok. Third
+of all, the requirements for the stateT type elsewhere in the standard
+(see 21.1.2 traits typedefs) only indicate that this type be copy
+constructible.
+</para>
+
+<para>
+As such, the type encoding_state is defined as a non-templatized, POD
+type to be used as the third type of a codecvt instantiation. This
+type is just a wrapper class for iconv, and provides an easy interface
+to iconv functionality.
+</para>
+
+<para>
+There are two constructors for encoding_state:
+</para>
+
+<para>
+<code>
+encoding_state() : __in_desc(0), __out_desc(0)
+</code>
+</para>
+<para>
+This default constructor sets the internal encoding to some default
+(currently UCS4) and the external encoding to whatever is returned by
+nl_langinfo(CODESET).
+</para>
+
+<para>
+<code>
+encoding_state(const char* __int, const char* __ext)
+</code>
+</para>
+
+<para>
+This constructor takes as parameters string literals that indicate the
+desired internal and external encoding. There are no defaults for
+either argument.
+</para>
+
+<para>
+One of the issues with iconv is that the string literals identifying
+conversions are not standardized. Because of this, the thought of
+mandating and or enforcing some set of pre-determined valid
+identifiers seems iffy: thus, a more practical (and non-migraine
+inducing) strategy was implemented: end-users can specify any string
+(subject to a pre-determined length qualifier, currently 32 bytes) for
+encodings. It is up to the user to make sure that these strings are
+valid on the target system.
+</para>
+
+<para>
+<code>
+void
+_M_init()
+</code>
+</para>
+<para>
+Strangely enough, this member function attempts to open conversion
+descriptors for a given encoding_state object. If the conversion
+descriptors are not valid, the conversion descriptors returned will
+not be valid and the resulting calls to the codecvt conversion
+functions will return error.
+</para>
+
+<para>
+<code>
+bool
+_M_good()
+</code>
+</para>
+
+<para>
+Provides a way to see if the given encoding_state object has been
+properly initialized. If the string literals describing the desired
+internal and external encoding are not valid, initialization will
+fail, and this will return false. If the internal and external
+encodings are valid, but iconv_open could not allocate conversion
+descriptors, this will also return false. Otherwise, the object is
+ready to convert and will return true.
+</para>
+
+<para>
+<code>
+encoding_state(const encoding_state&amp;)
+</code>
+</para>
+
+<para>
+As iconv allocates memory and sets up conversion descriptors, the copy
+constructor can only copy the member data pertaining to the internal
+and external code conversions, and not the conversion descriptors
+themselves.
+</para>
+
+<para>
+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.
+</para>
+
+</section>
+
+<section xml:id="facet.codecvt.use"><info><title>Use</title></info>
+
+<para>A conversions involving string literal.</para>
+
+<programlisting>
+ typedef codecvt_base::result result;
+ typedef unsigned short unicode_t;
+ typedef unicode_t int_type;
+ typedef char ext_type;
+ typedef encoding_state state_type;
+ typedef codecvt&lt;int_type, ext_type, state_type&gt; unicode_codecvt;
+
+ const ext_type* e_lit = "black pearl jasmine tea";
+ int size = strlen(e_lit);
+ int_type i_lit_base[24] =
+ { 25088, 27648, 24832, 25344, 27392, 8192, 28672, 25856, 24832, 29184,
+ 27648, 8192, 27136, 24832, 29440, 27904, 26880, 28160, 25856, 8192, 29696,
+ 25856, 24832, 2560
+ };
+ const int_type* i_lit = i_lit_base;
+ const ext_type* efrom_next;
+ const int_type* ifrom_next;
+ ext_type* e_arr = new ext_type[size + 1];
+ ext_type* eto_next;
+ int_type* i_arr = new int_type[size + 1];
+ int_type* ito_next;
+
+ // construct a locale object with the specialized facet.
+ locale loc(locale::classic(), new unicode_codecvt);
+ // sanity check the constructed locale has the specialized facet.
+ VERIFY( has_facet&lt;unicode_codecvt&gt;(loc) );
+ const unicode_codecvt&amp; cvt = use_facet&lt;unicode_codecvt&gt;(loc);
+ // convert between const char* and unicode strings
+ unicode_codecvt::state_type state01("UNICODE", "ISO_8859-1");
+ initialize_state(state01);
+ result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
+ i_arr, i_arr + size, ito_next);
+ VERIFY( r1 == codecvt_base::ok );
+ VERIFY( !int_traits::compare(i_arr, i_lit, size) );
+ VERIFY( efrom_next == e_lit + size );
+ VERIFY( ito_next == i_arr + size );
+</programlisting>
+
+</section>
+
+<section xml:id="facet.codecvt.future"><info><title>Future</title></info>
+
+<itemizedlist>
+<listitem>
+ <para>
+ 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?
+</para>
+</listitem>
+
+<listitem>
+ <para>
+ b. conversions involving std::string
+ </para>
+ <itemizedlist>
+ <listitem><para>
+ how should operators != and == work for string of
+ different/same encoding?
+ </para></listitem>
+
+ <listitem><para>
+ what is equal? A byte by byte comparison or an
+ encoding then byte comparison?
+ </para></listitem>
+
+ <listitem><para>
+ conversions between narrow, wide, and unicode strings
+ </para></listitem>
+ </itemizedlist>
+</listitem>
+<listitem><para>
+ c. conversions involving std::filebuf and std::ostream
+</para>
+ <itemizedlist>
+ <listitem><para>
+ how to initialize the state object in a
+ standards-conformant manner?
+ </para></listitem>
+
+ <listitem><para>
+ how to synchronize the "C" and "C++"
+ conversion information?
+ </para></listitem>
+
+ <listitem><para>
+ wchar_t/char internal buffers and conversions between
+ internal/external buffers?
+ </para></listitem>
+ </itemizedlist>
+</listitem>
+</itemizedlist>
+</section>
+
+
+<bibliography xml:id="facet.codecvt.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <citetitle>
+ The GNU C Library
+ </citetitle>
+ <author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
+ <copyright>
+ <year>2007</year>
+ <holder>FSF</holder>
+ </copyright>
+ <pagenums>
+ Chapters 6 Character Set Handling and 7 Locales and Internationalization
+ </pagenums>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ Correspondence
+ </citetitle>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
+ <copyright>
+ <year>2002</year>
+ <holder/>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 14882:1998 Programming languages - C++
+ </citetitle>
+ <copyright>
+ <year>1998</year>
+ <holder>ISO</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 9899:1999 Programming languages - C
+ </citetitle>
+ <copyright>
+ <year>1999</year>
+ <holder>ISO</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <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)
+ </link>
+ </title>
+
+ <copyright>
+ <year>2008</year>
+ <holder>
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+ </holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ The C++ Programming Language, Special Edition
+ </citetitle>
+ <author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder>Addison Wesley, Inc.</holder>
+ </copyright>
+ <pagenums>Appendix D</pagenums>
+ <publisher>
+ <publishername>
+ Addison Wesley
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <biblioentry>
+ <citetitle>
+ Standard C++ IOStreams and Locales
+ </citetitle>
+ <subtitle>
+ Advanced Programmer's Guide and Reference
+ </subtitle>
+ <author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
+ <author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder>Addison Wesley Longman, Inc.</holder>
+ </copyright>
+ <publisher>
+ <publishername>
+ Addison Wesley Longman
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <author><personname><surname>Feather</surname><firstname>Clive</firstname></personname></author>
+ <pagenums>Extended Character Sets</pagenums>
+ </biblioentry>
+
+ <biblioentry>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://tldp.org/HOWTO/Unicode-HOWTO.html">
+ The Unicode HOWTO
+ </link>
+ </title>
+
+ <author><personname><surname>Haible</surname><firstname>Bruno</firstname></personname></author>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+
+ <author><personname><surname>Khun</surname><firstname>Markus</firstname></personname></author>
+ </biblioentry>
+
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/concurrency.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/concurrency.xml
new file mode 100644
index 000000000..0d3381f1a
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/concurrency.xml
@@ -0,0 +1,69 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.concurrency" xreflabel="Concurrency">
+<?dbhtml filename="concurrency.html"?>
+
+<info><title>
+ Concurrency
+ <indexterm><primary>Concurrency</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ <keyword>mutex</keyword>
+ <keyword>thread</keyword>
+ <keyword>future</keyword>
+ <keyword>condition_variable</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+ Facilities for concurrent operation, and control thereof.
+</para>
+
+
+<!-- Sect1 01 : API -->
+<section xml:id="std.concurrency.api"><info><title>API Reference</title></info>
+
+
+ <para>
+ All items are declared in one of four standard header files.
+ </para>
+
+ <para>
+ In header <filename>mutex</filename>, class
+ template <classname>mutex</classname> and variants,
+ class <classname>once_flag</classname>, and class
+ template <classname>unique_lock</classname>.
+ </para>
+
+ <para>
+ In header <filename>condition_variable</filename>,
+ classes <classname>condition_variable</classname>
+ and <classname>condition_variable_any</classname>.
+ </para>
+
+ <para>
+ In header <filename>thread</filename>,
+ class <classname>thread</classname> and
+ namespace <code>this_thread</code>.
+ </para>
+
+ <para>
+ In header <filename>future</filename>, class
+ template <classname>future</classname> and class
+ template <classname>shared_future</classname>, class
+ template <classname>promise</classname>,
+ and <classname>packaged_task</classname>.
+ </para>
+
+ <para>
+ Full API details.
+ </para>
+
+ <!-- Doxygen XML: api/group__concurrency.xml -->
+
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
new file mode 100644
index 000000000..aef588d2c
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
@@ -0,0 +1,339 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.concurrency" xreflabel="Concurrency Extensions">
+<?dbhtml filename="ext_concurrency.html"?>
+
+<info><title>Concurrency</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<section xml:id="manual.ext.concurrency.design" xreflabel="Design"><info><title>Design</title></info>
+
+
+ <section xml:id="manual.ext.concurrency.design.threads" xreflabel="Threads API"><info><title>Interface to Locks and Mutexes</title></info>
+
+
+<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>
+
+<para>
+These types can be used in a portable manner, regardless of the
+specific environment. They are carefully designed to provide optimum
+efficiency and speed, abstracting out underlying thread calls and
+accesses when compiling for single-threaded situations (even on hosts
+that support multiple threads.)
+</para>
+
+<para>The enumerated type <code>_Lock_policy</code> details the set of
+available locking
+policies: <code>_S_single</code>, <code>_S_mutex</code>,
+and <code>_S_atomic</code>.
+</para>
+
+<itemizedlist>
+<listitem><para><code>_S_single</code></para>
+<para>Indicates single-threaded code that does not need locking.
+</para>
+
+</listitem>
+<listitem><para><code>_S_mutex</code></para>
+<para>Indicates multi-threaded code using thread-layer abstractions.
+</para>
+</listitem>
+<listitem><para><code>_S_atomic</code></para>
+<para>Indicates multi-threaded code using atomic operations.
+</para>
+</listitem>
+</itemizedlist>
+
+<para>The compile-time constant <code>__default_lock_policy</code> is set
+to one of the three values above, depending on characteristics of the
+host environment and the current compilation flags.
+</para>
+
+<para>Two more datatypes make up the rest of the
+interface: <code>__mutex</code>, and <code>__scoped_lock</code>.
+</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_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>
+
+ <section xml:id="manual.ext.concurrency.design.atomics" xreflabel="Atomic API"><info><title>Interface to Atomic Functions</title></info>
+
+
+
+<para>
+Two functions and one type form the base of atomic support.
+</para>
+
+
+<para>The type <code>_Atomic_word</code> is a signed integral type
+supporting atomic operations.
+</para>
+
+<para>
+The two functions functions are:
+</para>
+
+<programlisting>
+_Atomic_word
+__exchange_and_add_dispatch(volatile _Atomic_word*, int);
+
+void
+__atomic_add_dispatch(volatile _Atomic_word*, int);
+</programlisting>
+
+<para>Both of these functions are declared in the header file
+&lt;ext/atomicity.h&gt;, and are in <code>namespace __gnu_cxx</code>.
+</para>
+
+<itemizedlist>
+<listitem><para>
+<code>
+__exchange_and_add_dispatch
+</code>
+</para>
+<para>Adds the second argument's value to the first argument. Returns the old value.
+</para>
+</listitem>
+<listitem><para>
+<code>
+__atomic_add_dispatch
+</code>
+</para>
+<para>Adds the second argument's value to the first argument. Has no return value.
+</para>
+</listitem>
+</itemizedlist>
+
+<para>
+These functions forward to one of several specialized helper
+functions, depending on the circumstances. For instance,
+</para>
+
+<para>
+<code>
+__exchange_and_add_dispatch
+</code>
+</para>
+
+<para>
+Calls through to either of:
+</para>
+
+<itemizedlist>
+<listitem><para><code>__exchange_and_add</code>
+</para>
+<para>Multi-thread version. Inlined if compiler-generated builtin atomics
+can be used, otherwise resolved at link time to a non-builtin code
+sequence.
+</para>
+</listitem>
+
+<listitem><para><code>__exchange_and_add_single</code>
+</para>
+<para>Single threaded version. Inlined.</para>
+</listitem>
+</itemizedlist>
+
+<para>However, only <code>__exchange_and_add_dispatch</code>
+and <code>__atomic_add_dispatch</code> should be used. These functions
+can be used in a portable manner, regardless of the specific
+environment. They are carefully designed to provide optimum efficiency
+and speed, abstracting out atomic accesses when they are not required
+(even on hosts that support compiler intrinsics for atomic
+operations.)
+</para>
+
+<para>
+In addition, there are two macros
+</para>
+
+<para>
+<code>
+_GLIBCXX_READ_MEM_BARRIER
+</code>
+</para>
+<para>
+<code>
+_GLIBCXX_WRITE_MEM_BARRIER
+</code>
+</para>
+
+<para>
+Which expand to the appropriate write and read barrier required by the
+host hardware and operating system.
+</para>
+ </section>
+
+</section>
+
+
+<section xml:id="manual.ext.concurrency.impl" xreflabel="Implementation"><info><title>Implementation</title></info>
+ <?dbhtml filename="ext_concurrency_impl.html"?>
+
+ <section xml:id="manual.ext.concurrency.impl.atomic_fallbacks" xreflabel="Atomic F"><info><title>Using Builtin Atomic Functions</title></info>
+
+
+<para>The functions for atomic operations described above are either
+implemented via compiler intrinsics (if the underlying host is
+capable) or by library fallbacks.</para>
+
+<para>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>__sync_fetch_and_add</code> on an unsupported host is a
+missing reference to <code>__sync_fetch_and_add_4</code>.)
+</para>
+
+<para>In addition, on some hosts the compiler intrinsics are enabled
+conditionally, via the <code>-march</code> command line flag. This makes
+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>ATOMIC_BOOL_LOCK_FREE</code> will be defined.
+If builtins are possible for int-sized integral types,
+<code>ATOMIC_INT_LOCK_FREE</code> will be defined.
+</para>
+
+
+<para>For the following hosts, intrinsics are enabled by default.
+</para>
+
+<itemizedlist>
+ <listitem><para>alpha</para></listitem>
+ <listitem><para>ia64</para></listitem>
+ <listitem><para>powerpc</para></listitem>
+ <listitem><para>s390</para></listitem>
+</itemizedlist>
+
+<para>For others, some form of <code>-march</code> may work. On
+non-ancient x86 hardware, <code>-march=native</code> usually does the
+trick.</para>
+
+<para> For hosts without compiler intrinsics, but with capable
+hardware, hand-crafted assembly is selected. This is the case for the following hosts:
+</para>
+
+<itemizedlist>
+ <listitem><para>cris</para></listitem>
+ <listitem><para>hppa</para></listitem>
+ <listitem><para>i386</para></listitem>
+ <listitem><para>i486</para></listitem>
+ <listitem><para>m48k</para></listitem>
+ <listitem><para>mips</para></listitem>
+ <listitem><para>sparc</para></listitem>
+</itemizedlist>
+
+<para>And for the rest, a simulated atomic lock via pthreads.
+</para>
+
+<para> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html"> documentation</link>.
+</para>
+
+<para> More details on the library fallbacks from the porting <link linkend="internals.thread_safety">section</link>.
+</para>
+
+
+ </section>
+ <section xml:id="manual.ext.concurrency.impl.thread" xreflabel="Pthread"><info><title>Thread Abstraction</title></info>
+
+
+<para>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.
+</para>
+
+<para> 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.
+</para>
+
+<para>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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00883_source.html">documentation</link>.
+</para>
+
+<para>By design, the gthread layer is interoperable with the types,
+functions, and usage found in the usual &lt;pthread.h&gt; file,
+including <code>pthread_t</code>, <code>pthread_once_t</code>, <code>pthread_create</code>,
+etc.
+</para>
+
+ </section>
+</section>
+
+<section xml:id="manual.ext.concurrency.use" xreflabel="Use"><info><title>Use</title></info>
+<?dbhtml filename="ext_concurrency_use.html"?>
+
+
+<para>Typical usage of the last two constructs is demonstrated as follows:
+</para>
+
+<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();
+ }
+}
+</programlisting>
+
+<para>In this sample code, an anonymous namespace is used to keep
+the <code>__mutex</code> private to the compilation unit,
+and <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.
+</para>
+
+<para>Several exception classes are used to keep track of
+concurrence-related errors. These classes
+are: <code>__concurrence_lock_error</code>, <code>__concurrence_unlock_error</code>, <code>__concurrence_wait_error</code>,
+and <code>__concurrence_broadcast_error</code>.
+</para>
+
+
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/configure.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/configure.xml
new file mode 100644
index 000000000..05f6ebabe
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/configure.xml
@@ -0,0 +1,387 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.setup.configure" xreflabel="Configuring">
+<?dbhtml filename="configure.html"?>
+
+<info><title>Configure</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>configure</keyword>
+ <keyword>options</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+ When configuring libstdc++, you'll have to configure the entire
+ <emphasis>gccsrcdir</emphasis> directory. Consider using the
+ toplevel gcc configuration option
+ <literal>--enable-languages=c++</literal>, which saves time by only
+ building the C++ toolchain.
+</para>
+
+<para>
+ Here are all of the configure options specific to libstdc++. Keep
+ in mind that
+ <!-- This SECnn should be the "Choosing Package Options" section. -->
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceware.org/autobook/autobook/autobook_14.html">they
+ all have opposite forms as well</link> (enable/disable and
+ with/without). The defaults are for the <emphasis>current
+ development sources</emphasis>, which may be different than those
+ for released versions.
+</para>
+<para>The canonical way to find out the configure options that are
+ available for a given set of libstdc++ sources is to go to the
+ source directory and then type: <command>./configure --help</command>.
+</para>
+
+<variablelist>
+ <varlistentry><term><code>--enable-multilib</code>[default]</term>
+ <listitem><para>This is part of the generic multilib support for building cross
+ compilers. As such, targets like "powerpc-elf" will have
+ libstdc++ built many different ways: "-msoft-float"
+ and not, etc. A different libstdc++ will be built for each of
+ the different multilib versions. This option is on by default.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-sjlj-exceptions</code></term>
+ <listitem><para>Forces old, set-jump/long-jump exception handling model. If
+ at all possible, the new, frame unwinding exception handling routines
+ should be used instead, as they significantly reduce both
+ runtime memory usage and executable size. This option can
+ change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-version-specific-runtime-libs</code></term>
+ <listitem><para>Specify that run-time libraries should be installed in the
+ compiler-specific subdirectory (i.e.,
+ <code>${libdir}/gcc-lib/${target_alias}/${gcc_version}</code>)
+ instead of <code>${libdir}</code>. This option is useful if you
+ intend to use several versions of gcc in parallel. In addition,
+ libstdc++'s include files will be installed in
+ <code>${libdir}/gcc-lib/${target_alias}/${gcc_version}/include/g++</code>,
+ unless you also specify
+ <literal>--with-gxx-include-dir=</literal><filename class="directory">dirname</filename> during configuration.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--with-gxx-include-dir=&lt;include-files dir&gt;</code></term>
+ <listitem><para>Adds support for named libstdc++ include directory. For instance,
+ the following puts all the libstdc++ headers into a directory
+ called "4.4-20090404" instead of the usual
+ "c++/(version)".
+ </para>
+ <programlisting>
+ --with-gxx-include-dir=/foo/H-x86-gcc-3-c-gxx-inc/include/4.4-20090404</programlisting> </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-cstdio</code></term>
+ <listitem><para>This is an abbreviated form of <code>'--enable-cstdio=stdio'</code>
+ (described next).
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-cstdio=OPTION</code></term>
+ <listitem><para>Select a target-specific I/O package. At the moment, the only
+ choice is to use 'stdio', a generic "C" abstraction.
+ The default is 'stdio'. This option can change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-clocale</code></term>
+ <listitem><para>This is an abbreviated form of <code>'--enable-clocale=generic'</code>
+ (described next).
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-clocale=OPTION</code></term>
+ <listitem><para>Select a target-specific underlying locale package. The
+ 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.gnu.org/software/libc/">glibc</link>, the GNU C
+ library), 'generic' to use a generic "C" abstraction which consists
+ of "C" locale info, 'newlib' to specify the Newlib C library model
+ which only differs from the 'generic' model in the handling of
+ ctype, or 'darwin' which omits the <type>wchar_t</type> specializations
+ needed by the 'generic' model.
+ </para>
+
+ <para>If not explicitly specified, the configure process tries
+ to guess the most suitable package from the choices above. The
+ default is 'generic'. On glibc-based systems of sufficient
+ vintage (2.3 and newer), 'gnu' is automatically selected. On newlib-based
+ systems (<code>'--with_newlib=yes'</code>) and OpenBSD, 'newlib' is
+ automatically selected. On Mac OS X 'darwin' is automatically selected.
+ This option can change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-libstdcxx-allocator</code></term>
+ <listitem><para>This is an abbreviated form of
+ <code>'--enable-libstdcxx-allocator=auto'</code> (described
+ next).
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-libstdcxx-allocator=OPTION </code></term>
+ <listitem><para>Select a target-specific underlying std::allocator. The
+ choices are 'new' to specify a wrapper for new, 'malloc' to
+ specify a wrapper for malloc, 'mt' for a fixed power of two allocator,
+ 'pool' for the SGI pooled allocator or 'bitmap' for a bitmap allocator.
+ See this page for more information on allocator
+ <link linkend="allocator.ext">extensions</link>. This option
+ can change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-cheaders=OPTION</code></term>
+ <listitem><para>This allows the user to define the approach taken for C header
+ compatibility with C++. Options are c, c_std, and c_global.
+ These correspond to the source directory's include/c,
+ include/c_std, and include/c_global, and may also include
+ include/c_compatibility. The default is 'c_global'.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-threads</code></term>
+ <listitem><para>This is an abbreviated form of <code>'--enable-threads=yes'</code>
+ (described next).
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-threads=OPTION</code></term>
+ <listitem><para>Select a threading library. A full description is
+ given in the
+ general <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/configure.html">compiler
+ configuration instructions</link>. This option can change the
+ library ABI.
+ </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 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
+ <code>'--enable-libstdcxx-time=yes'</code>(described next).
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-libstdcxx-time=OPTION</code></term>
+ <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 2011 ISO C++ standard.
+ The choice OPTION=yes checks for the availability of the facilities
+ in libc and libposix4. In case it's needed the latter is also linked
+ to libstdc++ as part of the build process. OPTION=rt also searches
+ (and, if needed, links) librt. Note that the latter is not always
+ desirable because, in glibc, for example, in turn it triggers the
+ linking of libpthread too, which activates locking, a large overhead
+ for single-thread programs. OPTION=no skips the tests completely.
+ The default is OPTION=no.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-libstdcxx-debug</code></term>
+ <listitem><para>Build separate debug libraries in addition to what is normally built.
+ By default, the debug libraries are compiled with
+ <code> CXXFLAGS='-g3 -O0 -fno-inline'</code>
+ , are installed in <code>${libdir}/debug</code>, and have the
+ same names and versioning information as the non-debug
+ libraries. This option is off by default.
+ </para>
+ <para>Note this make command, executed in
+ the build directory, will do much the same thing, without the
+ configuration difference and without building everything twice:
+ <code>make CXXFLAGS='-g3 -O0 -fno-inline' all</code>
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-libstdcxx-debug-flags=FLAGS</code></term>
+
+ <listitem><para>This option is only valid when <code> --enable-debug </code>
+ is also specified, and applies to the debug builds only. With
+ this option, you can pass a specific string of flags to the
+ compiler to use when building the debug versions of libstdc++.
+ FLAGS is a quoted string of options, like
+ </para>
+ <programlisting>
+ --enable-libstdcxx-debug-flags='-g3 -O1 -fno-inline'</programlisting>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-cxx-flags=FLAGS</code></term>
+ <listitem><para>With this option, you can pass a string of -f (functionality)
+ flags to the compiler to use when building libstdc++. This
+ option can change the library ABI. FLAGS is a quoted string of
+ options, like
+ </para>
+ <programlisting>
+ --enable-cxx-flags='-fvtable-gc -fomit-frame-pointer -ansi'</programlisting>
+ <para>
+ Note that the flags don't necessarily have to all be -f flags,
+ as shown, but usually those are the ones that will make sense
+ for experimentation and configure-time overriding.
+ </para>
+ <para>The advantage of --enable-cxx-flags over setting CXXFLAGS in
+ the 'make' environment is that, if files are automatically
+ rebuilt, the same flags will be used when compiling those files
+ as well, so that everything matches.
+ </para>
+ <para>Fun flags to try might include combinations of
+ </para>
+ <programlisting>
+ -fstrict-aliasing
+ -fno-exceptions
+ -ffunction-sections
+ -fvtable-gc</programlisting>
+ <para>and opposite forms (-fno-) of the same. Tell us (the libstdc++
+ mailing list) if you discover more!
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-c99</code></term>
+ <listitem><para>The <type>long long</type> type was introduced in C99, along
+ with many other functions for wide characters, and math
+ classification macros, etc. If enabled, all C99 functions not
+ specified by the C++ standard will be put into <code>namespace
+ __gnu_cxx</code>, and then all these names will
+ be injected into namespace std, so that C99 functions can be
+ used "as if" they were in the C++ standard (as they
+ will eventually be in some future revision of the standard,
+ without a doubt). By default, C99 support is on, assuming the
+ configure probes find all the necessary functions and bits
+ necessary. This option can change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-wchar_t</code>[default]</term>
+ <listitem><para>Template specializations for the <type>wchar_t</type> type are
+ required for wide character conversion support. Disabling
+ wide character specializations may be expedient for initial
+ porting efforts, but builds only a subset of what is required by
+ ISO, and is not recommended. By default, this option is on.
+ This option can change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-long-long </code></term>
+ <listitem><para>The <type>long long</type> type was introduced in C99. It is
+ provided as a GNU extension to C++98 in g++. This flag builds
+ support for "long long" into the library (specialized
+ templates and the like for iostreams). This option is on by default:
+ if enabled, users will have to either use the new-style "C"
+ headers by default (i.e., &lt;cmath&gt; not &lt;math.h&gt;)
+ or add appropriate compile-time flags to all compile lines to
+ allow "C" visibility of this feature (on GNU/Linux,
+ the flag is -D_ISOC99_SOURCE, which is added automatically via
+ CPLUSPLUS_CPP_SPEC's addition of _GNU_SOURCE).
+ This option can change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-fully-dynamic-string</code></term>
+ <listitem><para>This option enables a special version of basic_string avoiding
+ the optimization that allocates empty objects in static memory.
+ Mostly useful together with shared memory allocators, see PR
+ libstdc++/16612 for details.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-concept-checks</code></term>
+ <listitem><para>This turns on additional compile-time checks for instantiated
+ library templates, in the form of specialized templates,
+ <link linkend="std.diagnostics.concept_checking">described here</link>. They
+ can help users discover when they break the rules of the STL, before
+ their programs run.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--enable-symvers[=style]</code></term>
+
+ <listitem><para>In 3.1 and later, tries to turn on symbol versioning in the
+ shared library (if a shared library has been
+ requested). Values for 'style' that are currently supported
+ are 'gnu', 'gnu-versioned-namespace', 'darwin',
+ 'darwin-export', and 'sun'. Both gnu- options require that a recent
+ version of the GNU linker be in use. Both darwin options are
+ equivalent. With no style given, the configure script will try
+ to guess correct defaults for the host system, probe to see if
+ additional requirements are necessary and present for
+ activation, and if so, will turn symbol versioning on. This
+ option can change the library ABI.
+ </para>
+
+ </listitem></varlistentry>
+
+ <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>
+
+ <varlistentry><term><code>--enable-libstdcxx-pch</code></term>
+ <listitem><para>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
+ seems capable of passing the simple sanity checks thrown at
+ it, try to build stdc++.h.gch as part of the make process.
+ In addition, this generated file is used later on (by appending <code>
+ --include bits/stdc++.h </code> to CXXFLAGS) when running the
+ testsuite.
+ </para>
+ </listitem></varlistentry>
+
+
+ <varlistentry><term><code>--enable-extern-template</code>[default]</term>
+ <listitem><para>Use extern template to pre-instantiate all required
+ specializations for certain types defined in the standard libraries.
+ These types include <classname>string</classname> and dependents like
+ <classname>char_traits</classname>, the templatized IO classes,
+ <classname>allocator</classname>, and others.
+ Disabling means that implicit
+ template generation will be used when compiling these types. By
+ default, this option is on. This option can change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>--disable-hosted-libstdcxx</code></term>
+ <listitem>
+ <para>
+ By default, a complete <emphasis>hosted</emphasis> C++ library is
+ built. The C++ Standard also describes a
+ <emphasis>freestanding</emphasis> environment, in which only a
+ minimal set of headers are provided. This option builds such an
+ environment.
+ </para>
+ </listitem></varlistentry>
+
+<varlistentry><term><code>--disable-libstdcxx-verbose</code></term>
+ <listitem>
+ <para>
+ By default, the library is configured to write descriptive messages
+ to standard error for certain events such as calling a pure virtual
+ function or the invocation of the standard terminate handler. Those
+ messages cause the library to depend on the demangler and standard I/O
+ facilites, which might be undesirable in a low-memory environment or
+ when standard error is not available. This option disables those
+ messages. This option does not change the library ABI.
+ </para>
+ </listitem></varlistentry>
+
+</variablelist>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/containers.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/containers.xml
new file mode 100644
index 000000000..920b491db
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/containers.xml
@@ -0,0 +1,538 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.containers" xreflabel="Containers">
+<?dbhtml filename="containers.html"?>
+
+<info><title>
+ Containers
+ <indexterm><primary>Containers</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<!-- Sect1 01 : Sequences -->
+<section xml:id="std.containers.sequences" xreflabel="Sequences"><info><title>Sequences</title></info>
+<?dbhtml filename="sequences.html"?>
+
+
+<section xml:id="containers.sequences.list" xreflabel="list"><info><title>list</title></info>
+<?dbhtml filename="list.html"?>
+
+ <section xml:id="sequences.list.size" xreflabel="list::size() is O(n)"><info><title>list::size() is O(n)</title></info>
+
+ <para>
+ 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/FAQ.html">their FAQ</link>:
+ </para>
+ <blockquote>
+ <para>
+ The size() member function, for list and slist, takes time
+ proportional to the number of elements in the list. This was a
+ deliberate tradeoff. The only way to get a constant-time
+ size() for linked lists would be to maintain an extra member
+ variable containing the list's size. This would require taking
+ extra time to update that variable (it would make splice() a
+ linear time operation, for example), and it would also make the
+ list larger. Many list algorithms don't require that extra
+ word (algorithms that do require it might do better with
+ vectors than with lists), and, when it is necessary to maintain
+ an explicit size count, it's something that users can do
+ themselves.
+ </para>
+ <para>
+ This choice is permitted by the C++ standard. The standard says
+ that size() <quote>should</quote> be constant time, and
+ <quote>should</quote> does not mean the same thing as
+ <quote>shall</quote>. This is the officially recommended ISO
+ wording for saying that an implementation is supposed to do
+ something unless there is a good reason not to.
+ </para>
+ <para>
+ One implication of linear time size(): you should never write
+ </para>
+ <programlisting>
+ if (L.size() == 0)
+ ...
+ </programlisting>
+
+ <para>
+ Instead, you should write
+ </para>
+
+ <programlisting>
+ if (L.empty())
+ ...
+ </programlisting>
+ </blockquote>
+ </section>
+</section>
+
+<section xml:id="containers.sequences.vector" xreflabel="vector"><info><title>vector</title></info>
+<?dbhtml filename="vector.html"?>
+
+ <para>
+ </para>
+ <section xml:id="sequences.vector.management" xreflabel="Space Overhead Management"><info><title>Space Overhead Management</title></info>
+
+ <para>
+ In <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html">this
+ message to the list</link>, Daniel Kostecky announced work on an
+ alternate form of <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.
+ </para>
+ <para>
+ The first two alpha releases were announced <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html">here</link>
+ and <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html">here</link>.
+ </para>
+
+ </section></section>
+</section>
+
+<!-- Sect1 02 : Associative -->
+<section xml:id="std.containers.associative" xreflabel="Associative"><info><title>Associative</title></info>
+<?dbhtml filename="associative.html"?>
+
+
+ <section xml:id="containers.associative.insert_hints" xreflabel="Insertion Hints"><info><title>Insertion Hints</title></info>
+
+ <para>
+ Section [23.1.2], Table 69, of the C++ standard lists this
+ function for all of the associative containers (map, set, etc):
+ </para>
+ <programlisting>
+ a.insert(p,t);
+ </programlisting>
+ <para>
+ where 'p' is an iterator into the container 'a', and 't' is the
+ item to insert. The standard says that <quote><code>t</code> is
+ inserted as close as possible to the position just prior to
+ <code>p</code>.</quote> (Library DR #233 addresses this topic,
+ referring to <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html">N1780</link>.
+ 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.
+ </para>
+ <para>
+ Here we'll describe how the hinting works in the libstdc++
+ implementation, and what you need to do in order to take
+ advantage of it. (Insertions can change from logarithmic
+ complexity to amortized constant time, if the hint is properly
+ used.) Also, since the current implementation is based on the
+ SGI STL one, these points may hold true for other library
+ implementations also, since the HP/SGI code is used in a lot of
+ places.
+ </para>
+ <para>
+ In the following text, the phrases <emphasis>greater
+ than</emphasis> and <emphasis>less than</emphasis> refer to the
+ results of the strict weak ordering imposed on the container by
+ its comparison object, which defaults to (basically)
+ <quote>&lt;</quote>. Using those phrases is semantically sloppy,
+ but I didn't want to get bogged down in syntax. I assume that if
+ you are intelligent enough to use your own comparison objects,
+ you are also intelligent enough to assign <quote>greater</quote>
+ and <quote>lesser</quote> their new meanings in the next
+ paragraph. *grin*
+ </para>
+ <para>
+ If the <code>hint</code> parameter ('p' above) is equivalent to:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <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,
+ becoming the new entry at <code>begin()</code>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <code>end()</code>, then the item being inserted should have
+ a key greater than all the other keys in the container. The
+ item will be inserted at the end of the container, becoming
+ the new entry before <code>end()</code>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ neither <code>begin()</code> nor <code>end()</code>, then:
+ Let <code>h</code> be the entry in the container pointed to
+ by <code>hint</code>, that is, <code>h = *hint</code>. Then
+ the item being inserted should have a key less than that of
+ <code>h</code>, and greater than that of the item preceding
+ <code>h</code>. The new item will be inserted between
+ <code>h</code> and <code>h</code>'s predecessor.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ For <code>multimap</code> and <code>multiset</code>, the
+ restrictions are slightly looser: <quote>greater than</quote>
+ should be replaced by <quote>not less than</quote>and <quote>less
+ than</quote> should be replaced by <quote>not greater
+ than.</quote> (Why not replace greater with
+ greater-than-or-equal-to? You probably could in your head, but
+ the mathematicians will tell you that it isn't the same thing.)
+ </para>
+ <para>
+ If the conditions are not met, then the hint is not used, and the
+ insertion proceeds as if you had called <code> a.insert(t)
+ </code> instead. (<emphasis>Note </emphasis> that GCC releases
+ prior to 3.0.2 had a bug in the case with <code>hint ==
+ begin()</code> for the <code>map</code> and <code>set</code>
+ classes. You should not use a hint argument in those releases.)
+ </para>
+ <para>
+ This behavior goes well with other containers'
+ <code>insert()</code> functions which take an iterator: if used,
+ the new item will be inserted before the iterator passed as an
+ argument, same as the other containers.
+ </para>
+ <para>
+ <emphasis>Note </emphasis> also that the hint in this
+ implementation is a one-shot. The older insertion-with-hint
+ routines check the immediately surrounding entries to ensure that
+ 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.
+ </para>
+ </section>
+
+
+ <section xml:id="containers.associative.bitset" xreflabel="bitset"><info><title>bitset</title></info>
+ <?dbhtml filename="bitset.html"?>
+
+ <section xml:id="associative.bitset.size_variable" xreflabel="Variable"><info><title>Size Variable</title></info>
+
+ <para>
+ No, you cannot write code of the form
+ </para>
+ <!-- Careful, the leading spaces in PRE show up directly. -->
+ <programlisting>
+ #include &lt;bitset&gt;
+
+ void foo (size_t n)
+ {
+ std::bitset&lt;n&gt; bits;
+ ....
+ }
+ </programlisting>
+ <para>
+ because <code>n</code> must be known at compile time. Your
+ compiler is correct; it is not a bug. That's the way templates
+ work. (Yes, it <emphasis>is</emphasis> a feature.)
+ </para>
+ <para>
+ 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:
+ </para>
+ <itemizedlist>
+ <listitem><para>A very large N in <code>bitset&lt;N&gt;</code>.</para></listitem>
+ <listitem><para>A container&lt;bool&gt;.</para></listitem>
+ <listitem><para>Extremely weird solutions.</para></listitem>
+ </itemizedlist>
+ <para>
+ <emphasis>A very large N in
+ <code>bitset&lt;N&gt;</code>.  </emphasis> It has been
+ pointed out a few times in newsgroups that N bits only takes up
+ (N/8) bytes on most systems, and division by a factor of eight is
+ pretty impressive when speaking of memory. Half a megabyte given
+ over to a bitset (recall that there is zero space overhead for
+ housekeeping info; it is known at compile time exactly how large
+ the set is) will hold over four million bits. If you're using
+ those bits as status flags (e.g.,
+ <quote>changed</quote>/<quote>unchanged</quote> flags), that's a
+ <emphasis>lot</emphasis> of state.
+ </para>
+ <para>
+ You can then keep track of the <quote>maximum bit used</quote>
+ during some testing runs on representative data, make note of how
+ many of those bits really need to be there, and then reduce N to
+ a smaller number. Leave some extra space, of course. (If you
+ plan to write code like the incorrect example above, where the
+ bitset is a local variable, then you may have to talk your
+ compiler into allowing that much stack space; there may be zero
+ space overhead, but it's all allocated inside the object.)
+ </para>
+ <para>
+ <emphasis>A container&lt;bool&gt;.  </emphasis> The
+ Committee made provision for the space savings possible with that
+ (N/8) usage previously mentioned, so that you don't have to do
+ wasteful things like <code>Container&lt;char&gt;</code> or
+ <code>Container&lt;short int&gt;</code>. Specifically,
+ <code>vector&lt;bool&gt;</code> is required to be specialized for
+ that space savings.
+ </para>
+ <para>
+ The problem is that <code>vector&lt;bool&gt;</code> doesn't
+ behave like a normal vector anymore. There have been
+ journal articles which discuss the problems (the ones by Herb
+ Sutter in the May and July/August 1999 issues of C++ Report cover
+ it well). Future revisions of the ISO C++ Standard will change
+ the requirement for <code>vector&lt;bool&gt;</code>
+ specialization. In the meantime, <code>deque&lt;bool&gt;</code>
+ is recommended (although its behavior is sane, you probably will
+ not get the space savings, but the allocation scheme is different
+ than that of vector).
+ </para>
+ <para>
+ <emphasis>Extremely weird solutions.  </emphasis> If
+ you have access to the compiler and linker at runtime, you can do
+ something insane, like figuring out just how many bits you need,
+ then writing a temporary source code file. That file contains an
+ instantiation of <code>bitset</code> for the required number of
+ bits, inside some wrapper functions with unchanging signatures.
+ Have your program then call the compiler on that file using
+ Position Independent Code, then open the newly-created object
+ file and load those wrapper functions. You'll have an
+ instantiation of <code>bitset&lt;N&gt;</code> for the exact
+ <code>N</code> that you need at the time. Don't forget to delete
+ the temporary files. (Yes, this <emphasis>can</emphasis> be, and
+ <emphasis>has been</emphasis>, done.)
+ </para>
+ <!-- I wonder if this next paragraph will get me in trouble... -->
+ <para>
+ This would be the approach of either a visionary genius or a
+ raving lunatic, depending on your programming and management
+ style. Probably the latter.
+ </para>
+ <para>
+ Which of the above techniques you use, if any, are up to you and
+ your intended application. Some time/space profiling is
+ indicated if it really matters (don't just guess). And, if you
+ manage to do anything along the lines of the third category, the
+ author would love to hear from you...
+ </para>
+ <para>
+ Also note that the implementation of bitset used in libstdc++ has
+ <link linkend="manual.ext.containers.sgi">some extensions</link>.
+ </para>
+
+ </section>
+ <section xml:id="associative.bitset.type_string" xreflabel="Type String"><info><title>Type String</title></info>
+
+ <para>
+ </para>
+ <para>
+ Bitmasks do not take char* nor const char* arguments in their
+ constructors. This is something of an accident, but you can read
+ about the problem: follow the library's <quote>Links</quote> from
+ the homepage, and from the C++ information <quote>defect
+ reflector</quote> link, select the library issues list. Issue
+ number 116 describes the problem.
+ </para>
+ <para>
+ For now you can simply make a temporary string object using the
+ constructor expression:
+ </para>
+ <programlisting>
+ std::bitset&lt;5&gt; b ( std::string(<quote>10110</quote>) );
+ </programlisting>
+
+ <para>
+ instead of
+ </para>
+
+ <programlisting>
+ std::bitset&lt;5&gt; b ( <quote>10110</quote> ); // invalid
+ </programlisting>
+ </section>
+ </section>
+
+</section>
+
+<!-- Sect1 03 : Unordered Associative -->
+<section xml:id="std.containers.unordered" xreflabel="Unordered">
+ <info><title>Unordered Associative</title></info>
+ <?dbhtml filename="unordered_associative.html"?>
+
+ <section xml:id="containers.unordered.hash" xreflabel="Hash">
+ <info><title>Hash Code</title></info>
+
+ <section xml:id="containers.unordered.cache" xreflabel="Cache">
+ <info><title>Hash Code Caching Policy</title></info>
+
+ <para>
+ The unordered containers in libstdc++ may cache the hash code for each
+ element alongside the element itself. In some cases not recalculating
+ the hash code every time it's needed can improve performance, but the
+ additional memory overhead can also reduce performance, so whether an
+ unordered associative container caches the hash code or not depends on
+ a number of factors. The caching policy for GCC 4.8 is described below.
+ </para>
+ <para>
+ The C++ standard requires that <code>erase</code> and <code>swap</code>
+ operations must not throw exceptions. Those operations might need an
+ element's hash code, but cannot use the hash function if it could
+ throw.
+ This means the hash codes will be cached unless the hash function
+ has a non-throwing exception specification such as <code>noexcept</code>
+ or <code>throw()</code>.
+ </para>
+ <para>
+ Secondly, libstdc++ also needs the hash code in the implementation of
+ <code>local_iterator</code> and <code>const_local_iterator</code> in
+ order to know when the iterator has reached the end of the bucket.
+ This means that the local iterator types will embed a copy of the hash
+ function when possible.
+ Because the local iterator types must be DefaultConstructible and
+ CopyAssignable, if the hash function type does not model those concepts
+ then it cannot be embedded and so the hash code must be cached.
+ Note that a hash function might not be safe to use when
+ default-constructed (e.g if it a function pointer) so a hash
+ function that is contained in a local iterator won't be used until
+ the iterator is valid, so the hash function has been copied from a
+ correctly-initialized object.
+ </para>
+ <para>
+ If the hash function is non-throwing, DefaultConstructible and
+ CopyAssignable then libstdc++ doesn't need to cache the hash code for
+ correctness, but might still do so for performance if computing a
+ hash code is an expensive operation, as it may be for arbitrarily
+ long strings.
+ As an extension libstdc++ provides a trait type to describe whether
+ a hash function is fast. By default hash functions are assumed to be
+ fast unless the trait is specialized for the hash function and the
+ trait's value is false, in which case the hash code will always be
+ cached.
+ The trait can be specialized for user-defined hash functions like so:
+ </para>
+ <programlisting>
+ #include &lt;unordered_set&gt;
+
+ struct hasher
+ {
+ std::size_t operator()(int val) const noexcept
+ {
+ // Some very slow computation of a hash code from an int !
+ ...
+ }
+ }
+
+ namespace std
+ {
+ template&lt;&gt;
+ struct __is_fast_hash&lt;hasher&gt; : std::false_type
+ { };
+ }
+ </programlisting>
+ </section>
+</section>
+
+</section>
+
+<!-- Sect1 04 : Interacting with C -->
+<section xml:id="std.containers.c" xreflabel="Interacting with C"><info><title>Interacting with C</title></info>
+<?dbhtml filename="containers_and_c.html"?>
+
+
+ <section xml:id="containers.c.vs_array" xreflabel="Containers vs. Arrays"><info><title>Containers vs. Arrays</title></info>
+
+ <para>
+ 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
+ you'll eventually run into difficulties, change everything back
+ to arrays, and then have to change all the code that uses those
+ data types to keep up with the change.
+ </para>
+ <para>
+ If your code makes use of the standard algorithms, this isn't as
+ scary as it sounds. The algorithms don't know, nor care, about
+ the kind of <quote>container</quote> on which they work, since
+ the algorithms are only given endpoints to work with. For the
+ container classes, these are iterators (usually
+ <code>begin()</code> and <code>end()</code>, but not always).
+ For builtin arrays, these are the address of the first element
+ and the <link linkend="iterators.predefined.end">past-the-end</link> element.
+ </para>
+ <para>
+ Some very simple wrapper functions can hide all of that from the
+ rest of the code. For example, a pair of functions called
+ <code>beginof</code> can be written, one that takes an array,
+ another that takes a vector. The first returns a pointer to the
+ first element, and the second returns the vector's
+ <code>begin()</code> iterator.
+ </para>
+ <para>
+ The functions should be made template functions, and should also
+ be declared inline. As pointed out in the comments in the code
+ below, this can lead to <code>beginof</code> being optimized out
+ of existence, so you pay absolutely nothing in terms of increased
+ code size or execution time.
+ </para>
+ <para>
+ The result is that if all your algorithm calls look like
+ </para>
+ <programlisting>
+ std::transform(beginof(foo), endof(foo), beginof(foo), SomeFunction);
+ </programlisting>
+ <para>
+ then the type of foo can change from an array of ints to a vector
+ of ints to a deque of ints and back again, without ever changing
+ any client code.
+ </para>
+
+<programlisting>
+// beginof
+template&lt;typename T&gt;
+ inline typename vector&lt;T&gt;::iterator
+ beginof(vector&lt;T&gt; &amp;v)
+ { return v.begin(); }
+
+template&lt;typename T, unsigned int sz&gt;
+ inline T*
+ beginof(T (&amp;array)[sz]) { return array; }
+
+// endof
+template&lt;typename T&gt;
+ inline typename vector&lt;T&gt;::iterator
+ endof(vector&lt;T&gt; &amp;v)
+ { return v.end(); }
+
+template&lt;typename T, unsigned int sz&gt;
+ inline T*
+ endof(T (&amp;array)[sz]) { return array + sz; }
+
+// lengthof
+template&lt;typename T&gt;
+ inline typename vector&lt;T&gt;::size_type
+ lengthof(vector&lt;T&gt; &amp;v)
+ { return v.size(); }
+
+template&lt;typename T, unsigned int sz&gt;
+ inline unsigned int
+ lengthof(T (&amp;)[sz]) { return sz; }
+</programlisting>
+
+ <para>
+ Astute readers will notice two things at once: first, that the
+ container class is still a <code>vector&lt;T&gt;</code> instead
+ of a more general <code>Container&lt;T&gt;</code>. This would
+ mean that three functions for <code>deque</code> would have to be
+ added, another three for <code>list</code>, and so on. This is
+ due to problems with getting template resolution correct; I find
+ it easier just to give the extra three lines and avoid confusion.
+ </para>
+ <para>
+ Second, the line
+ </para>
+ <programlisting>
+ inline unsigned int lengthof (T (&amp;)[sz]) { return sz; }
+ </programlisting>
+ <para>
+ looks just weird! Hint: unused parameters can be left nameless.
+ </para>
+ </section>
+
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/ctype.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/ctype.xml
new file mode 100644
index 000000000..21b70724f
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/ctype.xml
@@ -0,0 +1,218 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.localization.facet.ctype" xreflabel="ctype">
+<?dbhtml filename="ctype.html"?>
+
+<info><title>ctype</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>ctype</keyword>
+ </keywordset>
+</info>
+
+
+
+<section xml:id="facet.ctype.impl"><info><title>Implementation</title></info>
+
+
+ <section><info><title>Specializations</title></info>
+
+
+<para>
+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.
+</para>
+
+<para>
+The two required specializations are implemented as follows:
+</para>
+
+<para>
+<code>
+ctype&lt;char&gt;
+</code>
+</para>
+<para>
+This is simple specialization. Implementing this was a piece of cake.
+</para>
+
+<para>
+<code>
+ctype&lt;wchar_t&gt;
+</code>
+</para>
+<para>
+This specialization, by specifying all the template parameters, pretty
+much ties the hands of implementors. As such, the implementation is
+straightforward, involving mcsrtombs for the conversions between char
+to wchar_t and wcsrtombs for conversions between wchar_t and char.
+</para>
+
+<para>
+Neither of these two required specializations deals with Unicode
+characters.
+</para>
+
+ </section>
+</section>
+
+<section xml:id="facet.ctype.future"><info><title>Future</title></info>
+
+
+
+<itemizedlist>
+ <listitem>
+ <para>
+ How to deal with the global locale issue?
+ </para></listitem>
+
+ <listitem>
+ <para>
+ How to deal with different types than char, wchar_t? </para></listitem>
+
+ <listitem><para>
+ Overlap between codecvt/ctype: narrow/widen
+ </para></listitem>
+
+ <listitem>
+ <para>
+ Mask typedef in codecvt_base, argument types in codecvt. what
+ is know about this type?
+ </para></listitem>
+
+ <listitem>
+ <para>
+ Why mask* argument in codecvt?
+ </para></listitem>
+
+ <listitem>
+ <para>
+ Can this be made (more) generic? is there a simple way to
+ straighten out the configure-time mess that is a by-product of
+ this class?
+ </para></listitem>
+
+ <listitem>
+ <para>
+ Get the ctype&lt;wchar_t&gt;::mask stuff under control. Need to
+ make some kind of static table, and not do lookup every time
+ somebody hits the do_is... functions. Too bad we can't just
+ redefine mask for ctype&lt;wchar_t&gt;
+ </para></listitem>
+
+ <listitem>
+ <para>
+ Rename abstract base class. See if just smash-overriding is a
+ better approach. Clarify, add sanity to naming.
+ </para>
+ </listitem>
+
+</itemizedlist>
+
+
+</section>
+
+
+<bibliography xml:id="facet.ctype.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <citetitle>
+ The GNU C Library
+ </citetitle>
+ <author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
+ <copyright>
+ <year>2007</year>
+ <holder>FSF</holder>
+ </copyright>
+ <pagenums>Chapters 6 Character Set Handling and 7 Locales and Internationalization</pagenums>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ Correspondence
+ </citetitle>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
+ <copyright>
+ <year>2002</year>
+ <holder/>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 14882:1998 Programming languages - C++
+ </citetitle>
+ <copyright>
+ <year>1998</year>
+ <holder>ISO</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 9899:1999 Programming languages - C
+ </citetitle>
+ <copyright>
+ <year>1999</year>
+ <holder>ISO</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <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)
+ </link>
+ </title>
+
+ <copyright>
+ <year>1999</year>
+ <holder>
+ The Open Group/The Institute of Electrical and Electronics Engineers, Inc.</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ The C++ Programming Language, Special Edition
+ </citetitle>
+ <author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder>Addison Wesley, Inc.</holder>
+ </copyright>
+ <pagenums>Appendix D</pagenums>
+ <publisher>
+ <publishername>
+ Addison Wesley
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ Standard C++ IOStreams and Locales
+ </citetitle>
+ <subtitle>
+ Advanced Programmer's Guide and Reference
+ </subtitle>
+ <author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
+ <author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder>Addison Wesley Longman, Inc.</holder>
+ </copyright>
+ <publisher>
+ <publishername>
+ Addison Wesley Longman
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/debug.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/debug.xml
new file mode 100644
index 000000000..c354207fc
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/debug.xml
@@ -0,0 +1,362 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.using.debug" xreflabel="Debugging Support">
+<?dbhtml filename="debug.html"?>
+
+<info><title>Debugging Support</title>
+ <keywordset>
+ <keyword>C++</keyword>
+ <keyword>debug</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+ 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.
+</para>
+
+<section xml:id="debug.compiler"><info><title>Using <command>g++</command></title></info>
+
+ <para>
+ Compiler flags determine how debug information is transmitted
+ between compilation and debug or analysis tools.
+ </para>
+
+ <para>
+ The default optimizations and debug flags for a libstdc++ build
+ are <code>-g -O2</code>. However, both debug and optimization
+ flags can be varied to change debugging characteristics. For
+ instance, turning off all optimization via the <code>-g -O0
+ -fno-inline</code> flags will disable inlining and optimizations,
+ and add debugging information, so that stepping through all functions,
+ (including inlined constructors and destructors) is possible. In
+ addition, <code>-fno-eliminate-unused-debug-types</code> can be
+ used when additional debug information, such as nested class info,
+ is desired.
+</para>
+
+<para>
+ Or, the debug format that the compiler and debugger use to
+ communicate information about source constructs can be changed via
+ <code>-gdwarf-2</code> or <code>-gstabs</code> flags: some debugging
+ formats permit more expressive type and scope information to be
+ shown in GDB. Expressiveness can be enhanced by flags like
+ <code>-g3</code>. The default debug information for a particular
+ platform can be identified via the value set by the
+ PREFERRED_DEBUGGING_TYPE macro in the GCC sources.
+</para>
+
+<para>
+ Many other options are available: please see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options">"Options
+ for Debugging Your Program"</link> in Using the GNU Compiler
+ Collection (GCC) for a complete list.
+</para>
+</section>
+
+<section xml:id="debug.req"><info><title>Debug Versions of Library Binary Files</title></info>
+
+
+<para>
+ If you would like debug symbols in libstdc++, there are two ways to
+ build libstdc++ with debug flags. The first is to create a separate
+ debug build by running make from the top-level of a tree
+ freshly-configured with
+</para>
+<programlisting>
+ --enable-libstdcxx-debug
+</programlisting>
+<para>and perhaps</para>
+<programlisting>
+ --enable-libstdcxx-debug-flags='...'
+</programlisting>
+<para>
+ Both the normal build and the debug build will persist, without
+ having to specify <code>CXXFLAGS</code>, and the debug library will
+ be installed in a separate directory tree, in <code>(prefix)/lib/debug</code>.
+ For more information, look at the
+ <link linkend="manual.intro.setup.configure">configuration</link> section.
+</para>
+
+<para>
+ A second approach is to use the configuration flags
+</para>
+<programlisting>
+ make CXXFLAGS='-g3 -fno-inline -O0' all
+</programlisting>
+
+<para>
+ 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 <link linkend="manual.ext.debug_mode">debug mode</link>.</para>
+</section>
+
+<section xml:id="debug.memory"><info><title>Memory Leak Hunting</title></info>
+
+
+<para>
+ 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
+ attempted, but includes <code>mtrace</code>, <code>valgrind</code>,
+ <code>mudflap</code>, and the non-free commercial product
+ <code>purify</code>. In addition, <code>libcwd</code> has a
+ replacement for the global new and delete operators that can track
+ memory allocation and deallocation and provide useful memory
+ statistics.
+</para>
+
+<para>
+ Regardless of the memory debugging tool being used, there is one
+ thing of great importance to keep in mind when debugging C++ code
+ that uses <code>new</code> and <code>delete</code>: there are
+ different kinds of allocation schemes that can be used by <code>
+ std::allocator</code>. For implementation details, see the <link linkend="manual.ext.allocator.mt">mt allocator</link> documentation and
+ look specifically for <code>GLIBCXX_FORCE_NEW</code>.
+</para>
+
+<para>
+ In a nutshell, the optional <classname>mt_allocator</classname>
+ is a high-performance pool allocator, and can
+ give the mistaken impression that in a suspect executable, memory is
+ being leaked, when in reality the memory "leak" is a pool being used
+ by the library's allocator and is reclaimed after program
+ termination.
+</para>
+
+<para>
+ For valgrind, there are some specific items to keep in mind. First
+ of all, use a version of valgrind that will work with current GNU
+ C++ tools: the first that can do this is valgrind 1.0.4, but later
+ versions should work at least as well. Second of all, use a
+ completely unoptimized build to avoid confusing valgrind. Third, use
+ GLIBCXX_FORCE_NEW to keep extraneous pool allocation noise from
+ cluttering debug information.
+</para>
+
+<para>
+ Fourth, it may be necessary to force deallocation in other libraries
+ as well, namely the "C" library. On linux, this can be accomplished
+ with the appropriate use of the <code>__cxa_atexit</code> or
+ <code>atexit</code> functions.
+</para>
+
+<programlisting>
+ #include &lt;cstdlib&gt;
+
+ extern "C" void __libc_freeres(void);
+
+ void do_something() { }
+
+ int main()
+ {
+ atexit(__libc_freeres);
+ do_something();
+ return 0;
+ }
+</programlisting>
+
+
+<para>or, using <code>__cxa_atexit</code>:</para>
+
+<programlisting>
+ extern "C" void __libc_freeres(void);
+ extern "C" int __cxa_atexit(void (*func) (void *), void *arg, void *d);
+
+ void do_something() { }
+
+ int main()
+ {
+ extern void* __dso_handle __attribute__ ((__weak__));
+ __cxa_atexit((void (*) (void *)) __libc_freeres, NULL,
+ &amp;__dso_handle ? __dso_handle : NULL);
+ do_test();
+ return 0;
+ }
+</programlisting>
+
+<para>
+ Suggested valgrind flags, given the suggestions above about setting
+ up the runtime environment, library, and test file, might be:
+</para>
+<programlisting>
+ valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
+</programlisting>
+
+</section>
+
+<section xml:id="debug.races"><info><title>Data Race Hunting</title></info>
+<para>
+ All synchronization primitives used in the library internals need to be
+ understood by race detectors so that they do not produce false reports.
+</para>
+
+<para>
+ Two annotation macros are used to explain low-level synchronization
+ to race detectors:
+ <code>_GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE()</code> and
+ <code> _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER()</code>.
+ By default, these macros are defined empty -- anyone who wants
+ to use a race detector needs to redefine them to call an
+ appropriate API.
+ Since these macros are empty by default when the library is built,
+ 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. 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>,
+ <code>locale::facet</code> and <code>thread::_M_start_thread</code>)
+ requires rebuilding the relevant source files.
+</para>
+
+<para>
+ The approach described above is known to work with the following race
+ detection tools:
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://valgrind.org/docs/manual/drd-manual.html">
+ DRD</link>,
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ 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/">
+ ThreadSanitizer</link>.
+</para>
+
+<para>
+ With DRD, Helgrind and ThreadSanitizer you will need to define
+ the macros like this:
+<programlisting>
+ #define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) ANNOTATE_HAPPENS_BEFORE(A)
+ #define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A)
+</programlisting>
+ Refer to the documentation of each particular tool for details.
+</para>
+
+</section>
+
+<section xml:id="debug.gdb"><info><title>Using <command>gdb</command></title></info>
+
+ <para>
+ </para>
+
+<para>
+ Many options are available for GDB itself: please see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceware.org/gdb/current/onlinedocs/gdb/">
+ "GDB features for C++" </link> in the GDB documentation. Also
+ recommended: the other parts of this manual.
+</para>
+
+<para>
+ These settings can either be switched on in at the GDB command line,
+ or put into a .gdbint file to establish default debugging
+ characteristics, like so:
+</para>
+
+<programlisting>
+ set print pretty on
+ set print object on
+ set print static-members on
+ set print vtbl on
+ set print demangle on
+ set demangle-style gnu-v3
+</programlisting>
+
+<para>
+ Starting with version 7.0, GDB includes support for writing
+ pretty-printers in Python. Pretty printers for STL classes are
+ distributed with GCC from version 4.5.0. The most recent version of
+ these printers are always found in libstdc++ svn repository.
+ To enable these printers, check-out the latest printers to a local
+ directory:
+</para>
+
+<programlisting>
+ svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
+</programlisting>
+
+<para>
+ Next, add the following section to your ~/.gdbinit The path must
+ match the location where the Python module above was checked-out.
+ So if checked out to: /home/maude/gdb_printers/, the path would be as
+ written in the example below.
+</para>
+
+<programlisting>
+ python
+ import sys
+ sys.path.insert(0, '/home/maude/gdb_printers/python')
+ from libstdcxx.v6.printers import register_libstdcxx_printers
+ register_libstdcxx_printers (None)
+ end
+</programlisting>
+
+<para>
+ The path should be the only element that needs to be adjusted in the
+ example. Once loaded, STL classes that the printers support
+ should print in a more human-readable format. To print the classes
+ in the old style, use the /r (raw) switch in the print command
+ (i.e., print /r foo). This will print the classes as if the Python
+ pretty-printers were not loaded.
+</para>
+
+<para>
+ For additional information on STL support and GDB please visit:
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceware.org/gdb/wiki/STLSupport"> "GDB Support
+ for STL" </link> 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
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceware.org/gdb/"> "GDB: The GNU Project
+ Debugger" </link>.
+</para>
+
+</section>
+
+<section xml:id="debug.exceptions"><info><title>Tracking uncaught exceptions</title></info>
+
+<para>
+ The <link linkend="support.termination.verbose">verbose
+ termination handler</link> gives information about uncaught
+ exceptions which are killing the program. It is described in the
+ linked-to page.
+</para>
+</section>
+
+<section xml:id="debug.debug_mode"><info><title>Debug Mode</title></info>
+
+ <para> The <link linkend="manual.ext.debug_mode">Debug Mode</link>
+ has compile and run-time checks for many containers.
+ </para>
+</section>
+
+<section xml:id="debug.compile_time_checks"><info><title>Compile Time Checking</title></info>
+
+ <para> The <link linkend="manual.ext.compile_checks">Compile-Time
+ Checks</link> Extension has compile-time checks for many algorithms.
+ </para>
+</section>
+
+<section xml:id="debug.profile_mode" xreflabel="debug.profile_mode"><info><title>Profile-based Performance Analysis</title></info>
+
+ <para> The <link linkend="manual.ext.profile_mode">Profile-based
+ Performance Analysis</link> Extension has performance checks for many
+ algorithms.
+ </para>
+</section>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/debug_mode.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/debug_mode.xml
new file mode 100644
index 000000000..4948594dc
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/debug_mode.xml
@@ -0,0 +1,886 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.debug_mode" xreflabel="Debug Mode">
+<?dbhtml filename="debug_mode.html"?>
+
+<info><title>Debug Mode</title>
+ <keywordset>
+ <keyword>C++</keyword>
+ <keyword>library</keyword>
+ <keyword>debug</keyword>
+ </keywordset>
+</info>
+
+
+
+<section xml:id="manual.ext.debug_mode.intro" xreflabel="Intro"><info><title>Intro</title></info>
+
+ <para>
+ 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
+ incorrectly use the C++ standard library will exhibit behavior
+ that is not portable and may not even be predictable, because they
+ tread into implementation-specific or undefined behavior. To
+ detect some of these errors before they can become problematic,
+ libstdc++ offers a debug mode that provides additional checking of
+ library facilities, and will report errors in the use of libstdc++
+ as soon as they can be detected by emitting a description of the
+ problem to standard error and aborting the program. This debug
+ mode is available with GCC 3.4.0 and later versions.
+ </para>
+
+ <para>
+ 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:
+ </para>
+
+ <itemizedlist>
+ <listitem><para><emphasis>Safe iterators</emphasis>: 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
+ immediately.</para></listitem>
+
+ <listitem><para><emphasis>Algorithm preconditions</emphasis>: Algorithms attempt to
+ validate their input parameters to detect errors as early as
+ possible. For instance, the <code>set_intersection</code>
+ algorithm requires that its iterator
+ parameters <code>first1</code> and <code>last1</code> form a valid
+ iterator range, and that the sequence
+ [<code>first1</code>, <code>last1</code>) is sorted according to
+ the same predicate that was passed
+ to <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.</para></listitem>
+ </itemizedlist>
+
+</section>
+
+<section xml:id="manual.ext.debug_mode.semantics" xreflabel="Semantics"><info><title>Semantics</title></info>
+ <?dbhtml filename="debug_mode_semantics.html"?>
+
+ <para>
+ </para>
+
+<para>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
+ guarantees made by the normal library also hold for the debug mode
+ library, with one exception: performance guarantees made by the
+ normal library may not hold in the debug mode library. For
+ instance, erasing an element in a <code>std::list</code> is a
+ constant-time operation in normal library, but in debug mode it is
+ linear in the number of iterators that reference that particular
+ list. So while your (correct) program won't change its results, it
+ is likely to execute more slowly.</para>
+
+<para>libstdc++ includes many extensions to the C++ standard library. In
+ some cases the extensions are obvious, such as the hashed
+ associative containers, whereas other extensions give predictable
+ results to behavior that would otherwise be undefined, such as
+ throwing an exception when a <code>std::basic_string</code> is
+ constructed from a NULL character pointer. This latter category also
+ includes implementation-defined and unspecified semantics, such as
+ the growth rate of a vector. Use of these extensions is not
+ considered incorrect, so code that relies on them will not be
+ rejected by debug mode. However, use of these extensions may affect
+ the portability of code to other implementations of the C++ standard
+ library, and is therefore somewhat hazardous. For this reason, the
+ libstdc++ debug mode offers a "pedantic" mode (similar to
+ GCC's <code>-pedantic</code> compiler flag) that attempts to emulate
+ the semantics guaranteed by the C++ standard. For
+ instance, constructing a <code>std::basic_string</code> with a NULL
+ character pointer would result in an exception under normal mode or
+ non-pedantic debug mode (this is a libstdc++ extension), whereas
+ under pedantic debug mode libstdc++ would signal an error. To enable
+ the pedantic debug mode, compile your program with
+ both <code>-D_GLIBCXX_DEBUG</code>
+ and <code>-D_GLIBCXX_DEBUG_PEDANTIC</code> .
+ (N.B. In GCC 3.4.x and 4.0.0, due to a bug,
+ <code>-D_GLIBXX_DEBUG_PEDANTIC</code> was also needed. The problem has
+ been fixed in GCC 4.0.1 and later versions.) </para>
+
+<para>The following library components provide extra debugging
+ capabilities in debug mode:</para>
+<itemizedlist>
+ <listitem><para><code>std::basic_string</code> (no safe iterators and see note below)</para></listitem>
+ <listitem><para><code>std::bitset</code></para></listitem>
+ <listitem><para><code>std::deque</code></para></listitem>
+ <listitem><para><code>std::list</code></para></listitem>
+ <listitem><para><code>std::map</code></para></listitem>
+ <listitem><para><code>std::multimap</code></para></listitem>
+ <listitem><para><code>std::multiset</code></para></listitem>
+ <listitem><para><code>std::set</code></para></listitem>
+ <listitem><para><code>std::vector</code></para></listitem>
+ <listitem><para><code>std::unordered_map</code></para></listitem>
+ <listitem><para><code>std::unordered_multimap</code></para></listitem>
+ <listitem><para><code>std::unordered_set</code></para></listitem>
+ <listitem><para><code>std::unordered_multiset</code></para></listitem>
+</itemizedlist>
+
+<para>N.B. although there are precondition checks for some string operations,
+e.g. <code>operator[]</code>,
+they will not always be run when using the <code>char</code> and
+<code>wchar_t</code> specialisations (<code>std::string</code> and
+<code>std::wstring</code>). This is because libstdc++ uses GCC's
+<code>extern template</code> extension to provide explicit instantiations
+of <code>std::string</code> and <code>std::wstring</code>, and those
+explicit instantiations don't include the debug-mode checks. If the
+containing functions are inlined then the checks will run, so compiling
+with <code>-O1</code> might be enough to enable them. Alternatively
+<code>-D_GLIBCXX_EXTERN_TEMPLATE=0</code> will suppress the declarations
+of the explicit instantiations and cause the functions to be instantiated
+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>__gnu_debug::basic_string</code> debugging container directly,
+which always works correctly.
+</para>
+
+</section>
+
+<section xml:id="manual.ext.debug_mode.using" xreflabel="Using"><info><title>Using</title></info>
+ <?dbhtml filename="debug_mode_using.html"?>
+
+ <para>
+ </para>
+<section xml:id="debug_mode.using.mode" xreflabel="Using Mode"><info><title>Using the Debug Mode</title></info>
+
+
+<para>To use the libstdc++ debug mode, compile your application with the
+ compiler flag <code>-D_GLIBCXX_DEBUG</code>. Note that this flag
+ changes the sizes and behavior of standard class templates such
+ as <code>std::vector</code>, and therefore you can only link code
+ compiled with debug mode and code compiled without debug mode if no
+ instantiation of a container is passed between the two translation
+ units.</para>
+
+<para>By default, error messages are formatted to fit on lines of about
+ 78 characters. The environment variable
+ <code>GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
+ different length.</para>
+
+</section>
+
+<section xml:id="debug_mode.using.specific" xreflabel="Using Specific"><info><title>Using a Specific Debug Container</title></info>
+
+<para>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
+ debug mode, but they are available in a separate namespace as GNU
+ extensions and may be used in programs compiled with either release
+ mode or with debug mode. The
+ following table provides the names and headers of the debugging
+ containers:
+</para>
+
+<table frame="all">
+<title>Debugging Containers</title>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+
+<thead>
+ <row>
+ <entry>Container</entry>
+ <entry>Header</entry>
+ <entry>Debug container</entry>
+ <entry>Debug header</entry>
+ </row>
+</thead>
+<tbody>
+ <row>
+ <entry><classname>std::bitset</classname></entry>
+ <entry><filename class="headerfile">bitset</filename></entry>
+ <entry><classname>__gnu_debug::bitset</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/bitset&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::deque</classname></entry>
+ <entry><filename class="headerfile">deque</filename></entry>
+ <entry><classname>__gnu_debug::deque</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/deque&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::list</classname></entry>
+ <entry><filename class="headerfile">list</filename></entry>
+ <entry><classname>__gnu_debug::list</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/list&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::map</classname></entry>
+ <entry><filename class="headerfile">map</filename></entry>
+ <entry><classname>__gnu_debug::map</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/map&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::multimap</classname></entry>
+ <entry><filename class="headerfile">map</filename></entry>
+ <entry><classname>__gnu_debug::multimap</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/map&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::multiset</classname></entry>
+ <entry><filename class="headerfile">set</filename></entry>
+ <entry><classname>__gnu_debug::multiset</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/set&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::set</classname></entry>
+ <entry><filename class="headerfile">set</filename></entry>
+ <entry><classname>__gnu_debug::set</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/set&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::string</classname></entry>
+ <entry><filename class="headerfile">string</filename></entry>
+ <entry><classname>__gnu_debug::string</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/string&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::wstring</classname></entry>
+ <entry><filename class="headerfile">string</filename></entry>
+ <entry><classname>__gnu_debug::wstring</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/string&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::basic_string</classname></entry>
+ <entry><filename class="headerfile">string</filename></entry>
+ <entry><classname>__gnu_debug::basic_string</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/string&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::vector</classname></entry>
+ <entry><filename class="headerfile">vector</filename></entry>
+ <entry><classname>__gnu_debug::vector</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/vector&gt;</filename></entry>
+ </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>In addition, when compiling in C++11 mode, these additional
+containers have additional debug capability.
+</para>
+
+<table frame="all">
+<title>Debugging Containers C++11</title>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+
+<thead>
+ <row>
+ <entry>Container</entry>
+ <entry>Header</entry>
+ <entry>Debug container</entry>
+ <entry>Debug header</entry>
+ </row>
+</thead>
+<tbody>
+ <row>
+ <entry><classname>std::unordered_map</classname></entry>
+ <entry><filename class="headerfile">unordered_map</filename></entry>
+ <entry><classname>__gnu_debug::unordered_map</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/unordered_map&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::unordered_multimap</classname></entry>
+ <entry><filename class="headerfile">unordered_map</filename></entry>
+ <entry><classname>__gnu_debug::unordered_multimap</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/unordered_map&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::unordered_set</classname></entry>
+ <entry><filename class="headerfile">unordered_set</filename></entry>
+ <entry><classname>__gnu_debug::unordered_set</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/unordered_set&gt;</filename></entry>
+ </row>
+ <row>
+ <entry><classname>std::unordered_multiset</classname></entry>
+ <entry><filename class="headerfile">unordered_set</filename></entry>
+ <entry><classname>__gnu_debug::unordered_multiset</classname></entry>
+ <entry><filename class="headerfile">&lt;debug/unordered_set&gt;</filename></entry>
+ </row>
+</tbody>
+</tgroup>
+</table>
+</section>
+</section>
+
+<section xml:id="manual.ext.debug_mode.design" xreflabel="Design"><info><title>Design</title></info>
+ <?dbhtml filename="debug_mode_design.html"?>
+
+ <para>
+ </para>
+ <section xml:id="debug_mode.design.goals" xreflabel="Goals"><info><title>Goals</title></info>
+
+ <para>
+ </para>
+<para> 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:</para>
+
+ <itemizedlist>
+
+ <listitem><para><emphasis>Correctness</emphasis>: 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
+ of whether it is compiled with debug mode or release mode. In
+ particular, entities that are defined in namespace std in release
+ mode should remain defined in namespace std in debug mode, so that
+ legal specializations of namespace std entities will remain
+ valid. A program that is not valid C++ (e.g., invokes undefined
+ behavior) is not required to behave similarly, although the debug
+ mode will abort with a diagnostic when it detects undefined
+ behavior.</para></listitem>
+
+ <listitem><para><emphasis>Performance</emphasis>: the additional of the libstdc++ debug mode
+ must not affect the performance of the library when it is compiled
+ in release mode. Performance of the libstdc++ debug mode is
+ secondary (and, in fact, will be worse than the release
+ mode).</para></listitem>
+
+ <listitem><para><emphasis>Usability</emphasis>: the libstdc++ debug mode should be easy to
+ use. It should be easily incorporated into the user's development
+ environment (e.g., by requiring only a single new compiler switch)
+ and should produce reasonable diagnostics when it detects a
+ problem with the user program. Usability also involves detection
+ of errors when using the debug mode incorrectly, e.g., by linking
+ a release-compiled object against a debug-compiled object if in
+ fact the resulting program will not run correctly.</para></listitem>
+
+ <listitem><para><emphasis>Minimize recompilation</emphasis>: While it is expected that
+ users recompile at least part of their program to use debug
+ mode, the amount of recompilation affects the
+ detect-compile-debug turnaround time. This indirectly affects the
+ usefulness of the debug mode, because debugging some applications
+ may require rebuilding a large amount of code, which may not be
+ feasible when the suspect code may be very localized. There are
+ several levels of conformance to this requirement, each with its
+ own usability and implementation characteristics. In general, the
+ higher-numbered conformance levels are more usable (i.e., require
+ less recompilation) but are more complicated to implement than
+ the lower-numbered conformance levels.
+ <orderedlist inheritnum="ignore" continuation="restarts">
+ <listitem><para><emphasis>Full recompilation</emphasis>: 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
+ program can use debugging features.</para></listitem>
+
+ <listitem><para><emphasis>Full user recompilation</emphasis>: The user must recompile
+ his or her entire application and all C++ libraries it depends
+ on, but not the C++ standard library itself. This must be done
+ even if only a small part of the program can use debugging
+ features. This can be achieved given a full recompilation
+ system by compiling two versions of the standard library when
+ the compiler is installed and linking against the appropriate
+ one, e.g., a multilibs approach.</para></listitem>
+
+ <listitem><para><emphasis>Partial recompilation</emphasis>: The user must recompile the
+ parts of his or her application and the C++ libraries it
+ depends on that will use the debugging facilities
+ directly. This means that any code that uses the debuggable
+ standard containers would need to be recompiled, but code
+ that does not use them (but may, for instance, use IOStreams)
+ would not have to be recompiled.</para></listitem>
+
+ <listitem><para><emphasis>Per-use recompilation</emphasis>: The user must recompile the
+ parts of his or her application and the C++ libraries it
+ depends on where debugging should occur, and any other code
+ that interacts with those containers. This means that a set of
+ translation units that accesses a particular standard
+ container instance may either be compiled in release mode (no
+ checking) or debug mode (full checking), but must all be
+ compiled in the same way; a translation unit that does not see
+ that standard container instance need not be recompiled. This
+ also means that a translation unit <emphasis>A</emphasis> that contains a
+ particular instantiation
+ (say, <code>std::vector&lt;int&gt;</code>) compiled in release
+ mode can be linked against a translation unit <emphasis>B</emphasis> that
+ contains the same instantiation compiled in debug mode (a
+ feature not present with partial recompilation). While this
+ behavior is technically a violation of the One Definition
+ Rule, this ability tends to be very important in
+ practice. The libstdc++ debug mode supports this level of
+ recompilation. </para></listitem>
+
+ <listitem><para><emphasis>Per-unit recompilation</emphasis>: The user must only
+ recompile the translation units where checking should occur,
+ regardless of where debuggable standard containers are
+ used. This has also been dubbed "<code>-g</code> mode",
+ because the <code>-g</code> compiler switch works in this way,
+ emitting debugging information at a per--translation-unit
+ granularity. We believe that this level of recompilation is in
+ fact not possible if we intend to supply safe iterators, leave
+ the program semantics unchanged, and not regress in
+ performance under release mode because we cannot associate
+ extra information with an iterator (to form a safe iterator)
+ without either reserving that space in release mode
+ (performance regression) or allocating extra memory associated
+ with each iterator with <code>new</code> (changes the program
+ semantics).</para></listitem>
+ </orderedlist>
+ </para></listitem>
+ </itemizedlist>
+ </section>
+
+ <section xml:id="debug_mode.design.methods" xreflabel="Methods"><info><title>Methods</title></info>
+
+ <para>
+ </para>
+<para>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.</para>
+
+ <section xml:id="debug_mode.design.methods.wrappers" xreflabel="Method Wrapper"><info><title>The Wrapper Model</title></info>
+
+<para>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
+ operation is correct (aborting with a diagnostic if an error is
+ found) and will then forward to the underlying release-mode
+ container that will perform the actual work. This design decision
+ ensures that we cannot regress release-mode performance (because the
+ release-mode containers are left untouched) and partially
+ enables <link linkend="methods.coexistence.link">mixing debug and
+ release code</link> at link time, although that will not be
+ discussed at this time.</para>
+
+<para>Two types of wrappers are used in the implementation of the debug
+ mode: container wrappers and iterator wrappers. The two types of
+ wrappers interact to maintain relationships between iterators and
+ 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.</para>
+
+ <section xml:id="debug_mode.design.methods.safe_iter" xreflabel="Method Safe Iter"><info><title>Safe Iterators</title></info>
+
+<para>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>__gnu_debug::_Safe_iterator</code>,
+ which takes two template parameters:</para>
+
+<itemizedlist>
+ <listitem><para><code>Iterator</code>: The underlying iterator type, which must
+ be either the <code>iterator</code> or <code>const_iterator</code>
+ typedef from the sequence type this iterator can reference.</para></listitem>
+
+ <listitem><para><code>Sequence</code>: The type of sequence that this iterator
+ references. This sequence must be a safe sequence (discussed below)
+ whose <code>iterator</code> or <code>const_iterator</code> typedef
+ is the type of the safe iterator.</para></listitem>
+</itemizedlist>
+ </section>
+
+ <section xml:id="debug_mode.design.methods.safe_seq" xreflabel="Method Safe Seq"><info><title>Safe Sequences (Containers)</title></info>
+
+
+<para>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
+ wrappers are tailored to the container they reference, e.g., the
+ debugging version of <code>std::list</code> duplicates the entire
+ interface of <code>std::list</code>, adding additional semantic
+ checks and then forwarding operations to the
+ real <code>std::list</code> (a public base class of the debugging
+ version) as appropriate. However, all safe containers inherit from
+ the class template <code>__gnu_debug::_Safe_sequence</code>,
+ instantiated with the type of the safe container itself (an instance
+ of the curiously recurring template pattern).</para>
+
+<para>The iterators of a container wrapper will be
+ <link linkend="debug_mode.design.methods.safe_iter">safe
+ iterators</link> that reference sequences of this type and wrap the
+ iterators provided by the release-mode base class. The debugging
+ container will use only the safe iterators within its own interface
+ (therefore requiring the user to use safe iterators, although this
+ does not change correct user code) and will communicate with the
+ release-mode base class with only the underlying, unsafe,
+ release-mode iterators that the base class exports.</para>
+
+<para> The debugging version of <code>std::list</code> will have the
+ following basic structure:</para>
+
+<programlisting>
+template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
+ class debug-list :
+ public release-list&lt;_Tp, _Allocator&gt;,
+ public __gnu_debug::_Safe_sequence&lt;debug-list&lt;_Tp, _Allocator&gt; &gt;
+ {
+ typedef release-list&lt;_Tp, _Allocator&gt; _Base;
+ typedef debug-list&lt;_Tp, _Allocator&gt; _Self;
+
+ public:
+ typedef __gnu_debug::_Safe_iterator&lt;typename _Base::iterator, _Self&gt; iterator;
+ typedef __gnu_debug::_Safe_iterator&lt;typename _Base::const_iterator, _Self&gt; const_iterator;
+
+ // duplicate std::list interface with debugging semantics
+ };
+</programlisting>
+ </section>
+ </section>
+
+ <section xml:id="debug_mode.design.methods.precond" xreflabel="Precondition check"><info><title>Precondition Checking</title></info>
+
+<para>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>__check_xxx</code> macros defined
+ and documented in the source
+ file <code>include/debug/debug.h</code>. Preconditions that may or
+ may not be checked, depending on the debug-mode
+ macro <code>_GLIBCXX_DEBUG</code>, are checked via
+ the <code>__requires_xxx</code> macros defined and documented in the
+ same source file. Preconditions are validated using any additional
+ information available at run-time, e.g., the containers that are
+ associated with a particular iterator, the position of the iterator
+ within those containers, the distance between two iterators that may
+ form a valid range, etc. In the absence of suitable information,
+ e.g., an input iterator that is not a safe iterator, these
+ precondition checks will silently succeed.</para>
+
+<para>The majority of precondition checks use the aforementioned macros,
+ which have the secondary benefit of having prewritten debug
+ messages that use information about the current status of the
+ objects involved (e.g., whether an iterator is singular or what
+ sequence it is attached to) along with some static information
+ (e.g., the names of the function parameters corresponding to the
+ objects involved). When not using these macros, the debug mode uses
+ either the debug-mode assertion
+ macro <code>_GLIBCXX_DEBUG_ASSERT</code> , its pedantic
+ cousin <code>_GLIBCXX_DEBUG_PEDASSERT</code>, or the assertion
+ check macro that supports more advance formulation of error
+ messages, <code>_GLIBCXX_DEBUG_VERIFY</code>. These macros are
+ documented more thoroughly in the debug mode source code.</para>
+ </section>
+
+ <section xml:id="debug_mode.design.methods.coexistence" xreflabel="Coexistence"><info><title>Release- and debug-mode coexistence</title></info>
+
+<para>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
+ guarantee minimizes the recompilation that users are required to
+ perform, shortening the detect-compile-debug bug hunting cycle
+ and making the debug mode easier to incorporate into development
+ environments by minimizing dependencies.</para>
+
+<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++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
+ recompilation but have had to give up some checking of the
+ <code>std::basic_string</code> class template (namely, safe
+ iterators).
+</para>
+
+ <section xml:id="methods.coexistence.compile" xreflabel="Compile"><info><title>Compile-time coexistence of release- and debug-mode components</title></info>
+
+
+<para>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
+ time with the standard name, e.g., <code>std::list</code>. </para>
+
+<para>In release mode, we define only the release-mode version of the
+ component with its standard name and do not include the debugging
+ component at all. The release mode version is defined within the
+ namespace <code>std</code>. Minus the namespace associations, this
+ method leaves the behavior of release mode completely unchanged from
+ its behavior prior to the introduction of the libstdc++ debug
+ mode. Here's an example of what this ends up looking like, in
+ C++.</para>
+
+<programlisting>
+namespace std
+{
+ template&lt;typename _Tp, typename _Alloc = allocator&lt;_Tp&gt; &gt;
+ class list
+ {
+ // ...
+ };
+} // namespace std
+</programlisting>
+
+<para>In debug mode we include the release-mode container (which is now
+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++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
+to C++ code as follows:</para>
+
+<programlisting>
+namespace std
+{
+ namespace __cxx1998
+ {
+ template&lt;typename _Tp, typename _Alloc = allocator&lt;_Tp&gt; &gt;
+ class list
+ {
+ // ...
+ };
+ } // namespace __gnu_norm
+
+ namespace __debug
+ {
+ template&lt;typename _Tp, typename _Alloc = allocator&lt;_Tp&gt; &gt;
+ class list
+ : public __cxx1998::list&lt;_Tp, _Alloc&gt;,
+ public __gnu_debug::_Safe_sequence&lt;list&lt;_Tp, _Alloc&gt; &gt;
+ {
+ // ...
+ };
+ } // namespace __cxx1998
+
+ // namespace __debug __attribute__ ((strong));
+ inline namespace __debug { }
+}
+</programlisting>
+ </section>
+
+ <section xml:id="methods.coexistence.link" xreflabel="Link"><info><title>Link- and run-time coexistence of release- and
+ debug-mode components</title></info>
+
+
+<para>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
+names, and thus unique linkage.</para>
+
+<para>However, components that are defined and used within the C++
+standard library itself face additional constraints. For instance,
+some of the member functions of <code> std::moneypunct</code> return
+<code>std::basic_string</code>. Normally, this is not a problem, but
+with a mixed mode standard library that could be using either
+debug-mode or release-mode <code> basic_string</code> objects, things
+get more complicated. As the return value of a function is not
+encoded into the mangled name, there is no way to specify a
+release-mode or a debug-mode string. In practice, this results in
+runtime errors. A simplified example of this problem is as follows.
+</para>
+
+<para> Take this translation unit, compiled in debug-mode: </para>
+<programlisting>
+// -D_GLIBCXX_DEBUG
+#include &lt;string&gt;
+
+std::string test02();
+
+std::string test01()
+{
+ return test02();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+</programlisting>
+
+<para> ... and linked to this translation unit, compiled in release mode:</para>
+
+<programlisting>
+#include &lt;string&gt;
+
+std::string
+test02()
+{
+ return std::string("toast");
+}
+</programlisting>
+
+<para> For this reason we cannot easily provide safe iterators for
+ the <code>std::basic_string</code> class template, as it is present
+ throughout the C++ standard library. For instance, locale facets
+ define typedefs that include <code>basic_string</code>: in a mixed
+ debug/release program, should that typedef be based on the
+ debug-mode <code>basic_string</code> or the
+ release-mode <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:</para>
+
+<orderedlist inheritnum="ignore" continuation="restarts">
+ <listitem><para>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
+ the same across debug/release-mode translation unit barriers.</para></listitem>
+
+ <listitem><para>They have virtual functions returning strings: these functions
+ mangle in the same way regardless of the mangling of their return
+ types (see above), and their precise signatures can be relied upon
+ by users because they may be overridden in derived classes.</para></listitem>
+</orderedlist>
+
+<para>With the design of libstdc++ debug mode, we cannot effectively hide
+ the differences between debug and release-mode strings from the
+ user. Failure to hide the differences may result in unpredictable
+ behavior, and for this reason we have opted to only
+ perform <code>basic_string</code> changes that do not require ABI
+ changes. The effect on users is expected to be minimal, as there are
+ simple alternatives (e.g., <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.</para>
+ </section>
+
+ <section xml:id="methods.coexistence.alt" xreflabel="Alternatives"><info><title>Alternatives for Coexistence</title></info>
+
+
+<para>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.</para>
+
+<itemizedlist>
+ <listitem><para><emphasis>Completely separate debug/release libraries</emphasis>: 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,
+ because it is quite likely that some libraries an application
+ depends on cannot be recompiled easily. This would not meet
+ our <emphasis>usability</emphasis> or <emphasis>minimize recompilation</emphasis> criteria
+ well.</para></listitem>
+
+ <listitem><para><emphasis>Add a <code>Debug</code> boolean template parameter</emphasis>:
+ Partial specialization could be used to select the debug
+ implementation when <code>Debug == true</code>, and the state
+ of <code>_GLIBCXX_DEBUG</code> could decide whether the
+ default <code>Debug</code> argument is <code>true</code>
+ or <code>false</code>. This option would break conformance with the
+ C++ standard in both debug <emphasis>and</emphasis> release modes. This would
+ not meet our <emphasis>correctness</emphasis> criteria. </para></listitem>
+
+ <listitem><para><emphasis>Packaging a debug flag in the allocators</emphasis>: We could
+ reuse the <code>Allocator</code> template parameter of containers
+ by adding a sentinel wrapper <code>debug&lt;&gt;</code> that
+ signals the user's intention to use debugging, and pick up
+ the <code>debug&lt;&gt;</code> allocator wrapper in a partial
+ specialization. However, this has two drawbacks: first, there is a
+ conformance issue because the default allocator would not be the
+ standard-specified <code>std::allocator&lt;T&gt;</code>. Secondly
+ (and more importantly), users that specify allocators instead of
+ implicitly using the default allocator would not get debugging
+ containers. Thus this solution fails the <emphasis>correctness</emphasis>
+ criteria.</para></listitem>
+
+ <listitem><para><emphasis>Define debug containers in another namespace, and employ
+ a <code>using</code> declaration (or directive)</emphasis>: This is an
+ enticing option, because it would eliminate the need for
+ the <code>link_name</code> extension by aliasing the
+ templates. However, there is no true template aliasing mechanism
+ in C++, because both <code>using</code> directives and using
+ declarations disallow specialization. This method fails
+ the <emphasis>correctness</emphasis> criteria.</para></listitem>
+
+ <listitem><para><emphasis> Use implementation-specific properties of anonymous
+ namespaces. </emphasis>
+ See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00004.html"> this post
+ </link>
+ This method fails the <emphasis>correctness</emphasis> criteria.</para></listitem>
+
+ <listitem><para><emphasis>Extension: allow reopening on namespaces</emphasis>: This would
+ allow the debug mode to effectively alias the
+ namespace <code>std</code> to an internal namespace, such
+ as <code>__gnu_std_debug</code>, so that it is completely
+ separate from the release-mode <code>std</code> namespace. While
+ this will solve some renaming problems and ensure that
+ debug- and release-compiled code cannot be mixed unsafely, it ensures that
+ debug- and release-compiled code cannot be mixed at all. For
+ instance, the program would have two <code>std::cout</code>
+ objects! This solution would fails the <emphasis>minimize
+ recompilation</emphasis> requirement, because we would only be able to
+ support option (1) or (2).</para></listitem>
+
+ <listitem><para><emphasis>Extension: use link name</emphasis>: This option involves
+ complicated re-naming between debug-mode and release-mode
+ components at compile time, and then a g++ extension called <emphasis>
+ link name </emphasis> to recover the original names at link time. There
+ are two drawbacks to this approach. One, it's very verbose,
+ relying on macro renaming at compile time and several levels of
+ include ordering. Two, ODR issues remained with container member
+ functions taking no arguments in mixed-mode settings resulting in
+ equivalent link names, <code> vector::push_back() </code> being
+ one example.
+ See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00177.html">link
+ name</link> </para></listitem>
+</itemizedlist>
+
+<para>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
+ options that we could have implemented, but in all cases the full
+ ramifications of the approach (as measured against the design goals
+ for a libstdc++ debug mode) should be considered first. The DejaGNU
+ testsuite includes some testcases that check for known problems with
+ some solutions (e.g., the <code>using</code> declaration solution
+ 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.</para>
+ </section>
+ </section>
+ </section>
+
+ <section xml:id="debug_mode.design.other" xreflabel="Other"><info><title>Other Implementations</title></info>
+
+ <para>
+ </para>
+<para> 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:</para>
+<itemizedlist>
+ <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
+ has not been kept up-to-date for use with modern compilers or C++
+ standard library implementations.</para></listitem>
+
+ <listitem><para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stlport.org/">STLport</link>: STLport is a free
+ implementation of the C++ standard library derived from the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/">SGI implementation</link>, 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
+ somewhat incomplete and meets only the "Full user recompilation" (2)
+ recompilation guarantee by requiring the user to link against a
+ different library in debug mode vs. release mode.</para></listitem>
+
+ <listitem><para>Metrowerks CodeWarrior: The C++ standard library
+ that ships with Metrowerks CodeWarrior includes a debug mode. It is
+ 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.</para></listitem>
+</itemizedlist>
+
+ </section>
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/diagnostics.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/diagnostics.xml
new file mode 100644
index 000000000..99206e9fd
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/diagnostics.xml
@@ -0,0 +1,126 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.diagnostics" xreflabel="Diagnostics">
+<?dbhtml filename="diagnostics.html"?>
+
+<info><title>
+ Diagnostics
+ <indexterm><primary>Diagnostics</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<section xml:id="std.diagnostics.exceptions" xreflabel="Exceptions"><info><title>Exceptions</title></info>
+ <?dbhtml filename="exceptions.html"?>
+
+
+ <section xml:id="std.diagnostics.exceptions.api"><info><title>API Reference</title></info>
+
+ <para>
+ All exception objects are defined in one of the standard header
+ files: <filename>exception</filename>,
+ <filename>stdexcept</filename>, <filename>new</filename>, and
+ <filename>typeinfo</filename>.
+ </para>
+
+ <para>
+ The base exception object is <classname>exception</classname>,
+ located in <filename>exception</filename>. This object has no
+ <classname>string</classname> member.
+ </para>
+
+ <para>
+ Derived from this are several classes that may have a
+ <classname>string</classname> member: a full hierarchy can be
+ found in the source documentation.
+ </para>
+
+ <para>
+ Full API details.
+ </para>
+
+ <!-- Doxygen XML: api/group__exceptions.xml -->
+
+ </section>
+ <section xml:id="std.diagnostics.exceptions.data" xreflabel="Adding Data to Exceptions"><info><title>Adding Data to <classname>exception</classname></title></info>
+
+ <para>
+ 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
+ these exceptions when extending the hierarchy:
+ </para>
+ <programlisting>
+ struct My_Exception : public std::runtime_error
+ {
+ public:
+ My_Exception (const string&amp; whatarg)
+ : std::runtime_error(whatarg), e(errno), id(GetDataBaseID()) { }
+ int errno_at_time_of_throw() const { return e; }
+ DBID id_of_thing_that_threw() const { return id; }
+ protected:
+ int e;
+ DBID id; // some user-defined type
+ };
+ </programlisting>
+
+ </section>
+</section>
+
+<section xml:id="std.diagnostics.concept_checking" xreflabel="Concept Checking"><info><title>Concept Checking</title></info>
+ <?dbhtml filename="concept_checking.html"?>
+
+ <para>
+ In 1999, SGI added <quote>concept checkers</quote> to their
+ implementation of the STL: code which checked the template
+ parameters of instantiated pieces of the STL, in order to insure
+ that the parameters being used met the requirements of the
+ standard. For example, the Standard requires that types passed as
+ template parameters to <classname>vector</classname> be
+ "Assignable" (which means what you think it means). The
+ checking was done during compilation, and none of the code was
+ executed at runtime.
+ </para>
+ <para>
+ Unfortunately, the size of the compiler files grew significantly
+ as a result. The checking code itself was cumbersome. And bugs
+ were found in it on more than one occasion.
+ </para>
+ <para>
+ 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
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/concept_check/concept_check.htm">the
+ Boost libraries</link>, and we are pleased to incorporate it into the
+ GNU C++ library.
+ </para>
+ <para>
+ The new version imposes a much smaller space overhead on the generated
+ object file. The checks are also cleaner and easier to read and
+ understand.
+ </para>
+
+ <para>
+ They are off by default for all versions of GCC.
+ They can be enabled at configure time with
+ <link linkend="manual.intro.setup.configure"><literal>--enable-concept-checks</literal></link>.
+ You can enable them on a per-translation-unit basis with
+ <literal>-D_GLIBCXX_CONCEPT_CHECKS</literal>.
+ </para>
+
+ <para>
+ Please note that the checks are based on the requirements in the original
+ 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.
+ </para>
+
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/documentation_hacking.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/documentation_hacking.xml
new file mode 100644
index 000000000..59f844547
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/documentation_hacking.xml
@@ -0,0 +1,1164 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.doc" xreflabel="Documentation Hacking">
+<?dbhtml filename="documentation_hacking.html"?>
+
+<info><title>Writing and Generating Documentation</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>documentation</keyword>
+ <keyword>style</keyword>
+ <keyword>docbook</keyword>
+ <keyword>doxygen</keyword>
+ </keywordset>
+</info>
+
+ <section xml:id="doc.intro">
+ <info>
+ <title>Introduction</title>
+ </info>
+ <para>
+ Documentation for the GNU C++ Library is created from three
+ independent sources: a manual, a FAQ, and an API reference.
+ </para>
+ <para>
+ The sub-directory <filename class="directory">doc</filename>
+ within the main source directory contains
+ <filename>Makefile.am</filename> and
+ <filename>Makefile.in</filename>, which provide rules for
+ generating documentation, described in excruciating detail
+ below. The <filename class="directory">doc</filename>
+ sub-directory also contains three directories: <filename
+ class="directory">doxygen</filename>, which contains scripts and
+ fragments for <command>doxygen</command>, <filename
+ class="directory">html</filename>, which contains an html
+ version of the manual, and <filename
+ class="directory">xml</filename>, which contains an xml version
+ of the manual.
+ </para>
+ <para>
+ Diverging from established documentation conventions in the rest
+ of the GCC project, libstdc++ does not use Texinfo as a markup
+ language. Instead, Docbook is used to create the manual and the
+ FAQ, and Doxygen is used to construct the API
+ reference. Although divergent, this conforms to the GNU Project
+ recommendations as long as the output is of sufficient quality,
+ as per
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.gnu.org/prep/standards/standards.html#Documentation">
+ GNU Manuals</link>.
+ </para>
+ </section>
+
+ <section xml:id="doc.generation">
+ <info>
+ <title>Generating Documentation</title>
+ </info>
+
+ <para>
+ 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
+ install rule that is used to install any generated documentation
+ files into the prescribed installation directory. Files are
+ installed into <filename class="directory">share/doc</filename>
+ or <filename class="directory">share/man</filename> directories.
+ </para>
+
+ <para>
+ The standard Makefile rules are conditionally supported, based
+ on the results of examining the host environment for
+ prerequisites at configuration time. If requirements are not
+ found, the rule is aliased to a dummy rule that does nothing,
+ and produces no documentation. If the requirements are found,
+ the rule forwards to a private rule that produces the requested
+ documentation.
+ </para>
+
+ <para>
+ For more details on what prerequisites were found and where,
+ please consult the file <filename>config.log</filename> in the
+ libstdc++ build directory. Compare this log to what is expected
+ for the relevant Makefile conditionals:
+ <literal>BUILD_INFO</literal>, <literal>BUILD_XML</literal>,
+ <literal>BUILD_HTML</literal>, <literal>BUILD_MAN</literal>,
+ <literal>BUILD_PDF</literal>, and <literal>BUILD_EPUB</literal>.
+ </para>
+
+ <para>
+ Supported Makefile rules:
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <emphasis>make html</emphasis>
+ </term>
+ <term>
+ <emphasis>make install-html</emphasis>
+ </term>
+ <listitem>
+ <para>
+ Generates multi-page HTML documentation, and installs it
+ in the following directories:
+ </para>
+ <para>
+ <filename>doc/libstdc++/libstdc++-api.html</filename>
+ </para>
+ <para>
+ <filename>doc/libstdc++/libstdc++-manual.html</filename>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis>make pdf</emphasis>
+ </term>
+ <term>
+ <emphasis>make install-pdf</emphasis>
+ </term>
+ <listitem>
+ <para>
+ Generates indexed PDF documentation, and installs it as
+ the following files:
+ </para>
+ <para>
+ <filename>doc/libstdc++/libstdc++-api.pdf</filename>
+ </para>
+ <para>
+ <filename>doc/libstdc++/libstdc++-manual.pdf</filename>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis>make man</emphasis>
+ </term>
+ <term>
+ <emphasis>make install-man</emphasis>
+ </term>
+ <listitem>
+ <para>
+ Generates man pages, and installs it in the following directory:
+ </para>
+ <para>
+ <filename class="directory">man/man3/</filename>
+ </para>
+ <para>
+ The generated man pages are namespace-qualified, so to look at
+ the man page for <classname>vector</classname>, one would use
+ <command>man std::vector</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis>make epub</emphasis>
+ </term>
+ <term>
+ <emphasis>make install-epub</emphasis>
+ </term>
+ <listitem>
+ <para>
+ Generates documentation in the ebook/portable electronic
+ reader format called Epub, and installs it as the
+ following file.
+ </para>
+ <para>
+ <filename>doc/libstdc++/libstdc++-manual.epub</filename>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis>make xml</emphasis>
+ </term>
+ <term>
+ <emphasis>make install-xml</emphasis>
+ </term>
+ <listitem>
+ <para>
+ Generates single-file XML documentation, and installs it
+ as the following files:
+ </para>
+ <para>
+ <filename>doc/libstdc++/libstdc++-api-single.xml</filename>
+ </para>
+ <para>
+ <filename>doc/libstdc++/libstdc++-manual-single.xml</filename>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ Makefile rules for several other formats are explicitly not
+ supported, and are always aliased to dummy rules. These
+ unsupported formats are: <emphasis>info</emphasis>,
+ <emphasis>ps</emphasis>, and <emphasis>dvi</emphasis>.
+ </para>
+ </section>
+
+ <section xml:id="doc.doxygen"><info><title>Doxygen</title></info>
+
+ <section xml:id="doxygen.prereq"><info><title>Prerequisites</title></info>
+
+ <table frame="all">
+<title>Doxygen Prerequisites</title>
+
+<tgroup cols="3" align="center" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+
+ <thead>
+ <row>
+ <entry>Tool</entry>
+ <entry>Version</entry>
+ <entry>Required By</entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <row>
+ <entry>coreutils</entry>
+ <entry>8.5</entry>
+ <entry>all</entry>
+ </row>
+
+ <row>
+ <entry>bash</entry>
+ <entry>4.1</entry>
+ <entry>all</entry>
+ </row>
+
+ <row>
+ <entry>doxygen</entry>
+ <entry>1.7.6.1</entry>
+ <entry>all</entry>
+ </row>
+
+ <row>
+ <entry>graphviz</entry>
+ <entry>2.26</entry>
+ <entry>graphical hierarchies</entry>
+ </row>
+
+ <row>
+ <entry>pdflatex</entry>
+ <entry>2007-59</entry>
+ <entry>pdf output</entry>
+ </row>
+
+ </tbody>
+</tgroup>
+</table>
+
+
+ <para>
+ Prerequisite tools are Bash 2.0 or later,
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.doxygen.org/">Doxygen</link>, and
+ the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/software/coreutils/">GNU
+ coreutils</link>. (GNU versions of find, xargs, and possibly
+ sed and grep are used, just because the GNU versions make
+ things very easy.)
+ </para>
+
+ <para>
+ To generate the pretty pictures and hierarchy
+ graphs, the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.graphviz.org">Graphviz</link> package
+ will need to be installed. For PDF
+ 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>
+
+ <para>
+ 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
+ tools are not found, or are the wrong versions, the rule may
+ end in an error.
+ </para>
+
+ <para>
+ <screen><userinput>make doc-html-doxygen</userinput></screen>
+ </para>
+
+ <para>
+ <screen><userinput>make doc-xml-doxygen</userinput></screen>
+ </para>
+
+ <para>
+ <screen><userinput>make doc-xml-single-doxygen</userinput></screen>
+ </para>
+
+ <para>
+ <screen><userinput>make doc-pdf-doxygen</userinput></screen>
+ </para>
+
+ <para>
+ <screen><userinput>make doc-man-doxygen</userinput></screen>
+ </para>
+
+ <para>
+ Generated files are output into separate sub directories of
+ <filename class="directory">doc/doxygen/</filename> in the
+ build directory, based on the output format. For instance, the
+ HTML docs will be in <filename class="directory">doc/doxygen/html</filename>.
+ </para>
+
+ <para>
+ Careful observers will see that the Makefile rules simply call
+ a script from the source tree, <filename>run_doxygen</filename>, which
+ does the actual work of running Doxygen and then (most
+ importantly) massaging the output files. If for some reason
+ you prefer to not go through the Makefile, you can call this
+ script directly. (Start by passing <literal>--help</literal>.)
+ </para>
+
+ <para>
+ If you wish to tweak the Doxygen settings, do so by editing
+ <filename>doc/doxygen/user.cfg.in</filename>. Notes to fellow
+ library hackers are written in triple-# comments.
+ </para>
+
+ </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>
+
+
+ <para>
+ In general, libstdc++ files should be formatted according to
+ the rules found in the
+ <link linkend="contrib.coding_style">Coding Standard</link>. Before
+ any doxygen-specific formatting tweaks are made, please try to
+ make sure that the initial formatting is sound.
+ </para>
+
+ <para>
+ Adding Doxygen markup to a file (informally called
+ <quote>doxygenating</quote>) is very simple. The Doxygen manual can be
+ found
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stack.nl/~dimitri/doxygen/download.html#latestman">here</link>.
+ We try to use a very-recent version of Doxygen.
+ </para>
+
+ <para>
+ For classes, use
+ <classname>deque</classname>/<classname>vector</classname>/<classname>list</classname>
+ and <classname>std::pair</classname> as examples. For
+ functions, see their member functions, and the free functions
+ in <filename>stl_algobase.h</filename>. Member functions of
+ other container-like types should read similarly to these
+ member functions.
+ </para>
+
+ <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/manual/docblocks.html">Special
+ Documentation Blocks</link> section of the Doxygen manual:
+ </para>
+
+ <orderedlist inheritnum="ignore" continuation="restarts">
+ <listitem>
+ <para>For longer comments, use the Javadoc style...</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ ...not the Qt style. The intermediate *'s are preferred.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use the triple-slash style only for one-line comments (the
+ <quote>brief</quote> mode).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ This is disgusting. Don't do this.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ Some specific guidelines:
+ </para>
+
+ <para>
+ Use the @-style of commands, not the !-style. Please be
+ careful about whitespace in your markup comments. Most of the
+ time it doesn't matter; doxygen absorbs most whitespace, and
+ both HTML and *roff are agnostic about whitespace. However,
+ in &lt;pre&gt; blocks and @code/@endcode sections, spacing can
+ have <quote>interesting</quote> effects.
+ </para>
+
+ <para>
+ Use either kind of grouping, as
+ appropriate. <filename>doxygroups.cc</filename> exists for this
+ purpose. See <filename>stl_iterator.h</filename> for a good example
+ of the <quote>other</quote> kind of grouping.
+ </para>
+
+ <para>
+ Please use markup tags like @p and @a when referring to things
+ such as the names of function parameters. Use @e for emphasis
+ when necessary. Use @c to refer to other standard names.
+ (Examples of all these abound in the present code.)
+ </para>
+
+ <para>
+ Complicated math functions should use the multi-line
+ format. An example from <filename>random.h</filename>:
+ </para>
+
+ <para>
+<literallayout class="normal">
+/**
+ * @brief A model of a linear congruential random number generator.
+ *
+ * @f[
+ * x_{i+1}\leftarrow(ax_{i} + c) \bmod m
+ * @f]
+ */
+</literallayout>
+ </para>
+
+ <para>
+ One area of note is the markup required for
+ <literal>@file</literal> markup in header files. Two details
+ are important: for filenames that have the same name in
+ multiple directories, include part of the installed path to
+ disambiguate. For example:
+ </para>
+
+ <para>
+<literallayout class="normal">
+/** @file debug/vector
+ * This file is a GNU debug extension to the Standard C++ Library.
+ */
+</literallayout>
+ </para>
+
+ <para>
+ The other relevant detail for header files is the use of a
+ libstdc++-specific doxygen alias that helps distinguish
+ between public header files (like <filename>random</filename>)
+ from implementation or private header files (like
+ <filename>bits/c++config.h</filename>.) This alias is spelled
+ <literal>@headername</literal> and can take one or two
+ arguments that detail the public header file or files that
+ should be included to use the contents of the file. All header
+ files that are not intended for direct inclusion must use
+ <literal>headername</literal> in the <literal>file</literal>
+ block. An example:
+ </para>
+
+ <para>
+<literallayout class="normal">
+/** @file bits/basic_string.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{string}
+ */
+</literallayout>
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+<table frame="all">
+<title>HTML to Doxygen Markup Comparison</title>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+
+ <thead>
+ <row>
+ <entry>HTML</entry>
+ <entry>Doxygen</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>\</entry>
+ <entry>\\</entry>
+ </row>
+
+ <row>
+ <entry>"</entry>
+ <entry>\"</entry>
+ </row>
+
+ <row>
+ <entry>'</entry>
+ <entry>\'</entry>
+ </row>
+
+ <row>
+ <entry>&lt;i&gt;</entry>
+ <entry>@a word</entry>
+ </row>
+
+ <row>
+ <entry>&lt;b&gt;</entry>
+ <entry>@b word</entry>
+ </row>
+
+ <row>
+ <entry>&lt;code&gt;</entry>
+ <entry>@c word</entry>
+ </row>
+
+ <row>
+ <entry>&lt;em&gt;</entry>
+ <entry>@a word</entry>
+ </row>
+
+ <row>
+ <entry>&lt;em&gt;</entry>
+ <entry>&lt;em&gt;two words or more&lt;/em&gt;</entry>
+ </row>
+ </tbody>
+
+</tgroup>
+</table>
+
+
+ </section>
+
+ </section>
+
+ <section xml:id="doc.docbook"><info><title>Docbook</title></info>
+
+
+ <section xml:id="docbook.prereq"><info><title>Prerequisites</title></info>
+
+
+ <table frame="all">
+<title>Docbook Prerequisites</title>
+
+<tgroup cols="3" align="center" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+
+ <thead>
+ <row>
+ <entry>Tool</entry>
+ <entry>Version</entry>
+ <entry>Required By</entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <row>
+ <entry>docbook5-style-xsl</entry>
+ <entry>1.76.1</entry>
+ <entry>all</entry>
+ </row>
+
+ <row>
+ <entry>xsltproc</entry>
+ <entry>1.1.26</entry>
+ <entry>all</entry>
+ </row>
+
+ <row>
+ <entry>xmllint</entry>
+ <entry>2.7.7</entry>
+ <entry>validation</entry>
+ </row>
+
+ <row>
+ <entry>dblatex</entry>
+ <entry>0.3</entry>
+ <entry>pdf output</entry>
+ </row>
+
+ <row>
+ <entry>pdflatex</entry>
+ <entry>2007-59</entry>
+ <entry>pdf output</entry>
+ </row>
+
+ <row>
+ <entry>docbook2X</entry>
+ <entry>0.8.8</entry>
+ <entry>info output</entry>
+ </row>
+
+ <row>
+ <entry>epub3 stylesheets</entry>
+ <entry>b3</entry>
+ <entry>epub output</entry>
+ </row>
+
+ </tbody>
+</tgroup>
+</table>
+
+ <para>
+ Editing the DocBook sources requires an XML editor. Many
+ exist: some notable options
+ include <command>emacs</command>, <application>Kate</application>,
+ or <application>Conglomerate</application>.
+ </para>
+
+ <para>
+ Some editors support special <quote>XML Validation</quote>
+ modes that can validate the file as it is
+ produced. Recommended is the <command>nXML Mode</command>
+ for <command>emacs</command>.
+ </para>
+
+ <para>
+ Besides an editor, additional DocBook files and XML tools are
+ also required.
+ </para>
+
+ <para>
+ Access to the DocBook 5.0 stylesheets and schema is required. The
+ stylesheets are usually packaged by vendor, in something
+ like <filename>docbook5-style-xsl</filename>. To exactly match
+ generated output, please use a version of the stylesheets
+ equivalent
+ to <filename>docbook5-style-xsl-1.75.2-3</filename>. The
+ installation directory for this package corresponds to
+ the <literal>XSL_STYLE_DIR</literal>
+ in <filename>doc/Makefile.am</filename> and defaults
+ to <filename class="directory">/usr/share/sgml/docbook/xsl-ns-stylesheets</filename>.
+ </para>
+
+ <para>
+ For processing XML, an XSLT processor and some style
+ sheets are necessary. Defaults are <command>xsltproc</command>
+ provided by <filename>libxslt</filename>.
+ </para>
+
+ <para>
+ For validating the XML document, you'll need
+ something like <command>xmllint</command> and access to the
+ relevant DocBook schema. These are provided
+ by a vendor package like <filename>libxml2</filename> and <filename>docbook5-schemas-5.0-4</filename>
+ </para>
+
+ <para>
+ For PDF output, something that transforms valid Docbook XML to PDF is
+ required. Possible solutions include <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dblatex.sourceforge.net">dblatex</link>,
+ <command>xmlto</command>, or <command>prince</command>. Of
+ these, <command>dblatex</command> is the default. Other
+ options are listed on the DocBook web <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wiki.docbook.org/topic/DocBookPublishingTools">pages</link>. Please
+ consult the <email>libstdc++@gcc.gnu.org</email> list when
+ preparing printed manuals for current best practice and
+ suggestions.
+ </para>
+
+ <para>
+ 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>
+
+
+ <para>
+ 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
+ conditional! If the required tools are not found, or are the
+ wrong versions, the rule may end in an error.
+ </para>
+
+ <para>
+ <screen><userinput>make doc-html-docbook</userinput></screen>
+ </para>
+
+ <para>
+ <screen><userinput>make doc-pdf-docbook</userinput></screen>
+ </para>
+
+ <para>
+ <screen><userinput>make doc-xml-single-docbook</userinput></screen>
+ </para>
+
+ <para>
+ Generated files are output into separate sub directores of
+ <filename class="directory">doc/docbook/</filename> in the
+ build directory, based on the output format. For instance, the
+ HTML docs will be in <filename
+ class="directory">doc/docbook/html</filename>.
+ </para>
+
+ <para>
+ If the Docbook stylesheets are installed in a custom location,
+ one can use the variable <literal>XSL_STYLE_DIR</literal> to
+ override the Makefile defaults. For example:
+ </para>
+
+ <screen>
+ <userinput>
+make <literal>XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwalsh"</literal> doc-html-docbook
+ </userinput>
+ </screen>
+
+ </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>
+ 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:
+ </para>
+
+ <screen>
+ <userinput>make doc-xml-validate-docbook</userinput>
+ </screen>
+
+ <para>
+ This is equivalent to doing:
+ </para>
+
+ <screen>
+ <userinput>
+ xmllint --noout --valid <filename>xml/index.xml</filename>
+ </userinput>
+ </screen>
+
+ <para>
+ Please note that individual sections and chapters of the
+ manual can be validated by substituting the file desired for
+ <filename>xml/index.xml</filename> in the command
+ above. Reducing scope in this manner can be helpful when
+ validation on the entire manual fails.
+ </para>
+
+ <para>
+ All Docbook xml sources should always validate. No excuses!
+ </para>
+
+ </section>
+
+ <section xml:id="docbook.examples"><info><title>File Organization and Basics</title></info>
+
+
+ <literallayout class="normal">
+ <emphasis>Which files are important</emphasis>
+
+ All Docbook files are in the directory
+ libstdc++-v3/doc/xml
+
+ Inside this directory, the files of importance:
+ spine.xml - index to documentation set
+ manual/spine.xml - index to manual
+ manual/*.xml - individual chapters and sections of the manual
+ faq.xml - index to FAQ
+ api.xml - index to source level / API
+
+ All *.txml files are template xml files, i.e., otherwise empty files with
+ the correct structure, suitable for filling in with new information.
+
+ <emphasis>Canonical Writing Style</emphasis>
+
+ class template
+ function template
+ member function template
+ (via C++ Templates, Vandevoorde)
+
+ class in namespace std: allocator, not std::allocator
+
+ header file: iostream, not &lt;iostream&gt;
+
+
+ <emphasis>General structure</emphasis>
+
+ &lt;set&gt;
+ &lt;book&gt;
+ &lt;/book&gt;
+
+ &lt;book&gt;
+ &lt;chapter&gt;
+ &lt;/chapter&gt;
+ &lt;/book&gt;
+
+ &lt;book&gt;
+ &lt;part&gt;
+ &lt;chapter&gt;
+ &lt;section&gt;
+ &lt;/section&gt;
+
+ &lt;sect1&gt;
+ &lt;/sect1&gt;
+
+ &lt;sect1&gt;
+ &lt;sect2&gt;
+ &lt;/sect2&gt;
+ &lt;/sect1&gt;
+ &lt;/chapter&gt;
+
+ &lt;chapter&gt;
+ &lt;/chapter&gt;
+ &lt;/part&gt;
+ &lt;/book&gt;
+
+ &lt;/set&gt;
+ </literallayout>
+ </section>
+
+ <section xml:id="docbook.markup"><info><title>Markup By Example</title></info>
+
+
+ <para>
+ Complete details on Docbook markup can be found in the DocBook
+ Element Reference,
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.docbook.org/tdg/en/html/part2.html">online</link>.
+ An incomplete reference for HTML to Docbook conversion is
+ detailed in the table below.
+ </para>
+
+<table frame="all">
+<title>HTML to Docbook XML Markup Comparison</title>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+
+ <thead>
+ <row>
+ <entry>HTML</entry>
+ <entry>Docbook</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>&lt;p&gt;</entry>
+ <entry>&lt;para&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;pre&gt;</entry>
+ <entry>&lt;computeroutput&gt;, &lt;programlisting&gt;,
+ &lt;literallayout&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;ul&gt;</entry>
+ <entry>&lt;itemizedlist&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;ol&gt;</entry>
+ <entry>&lt;orderedlist&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;il&gt;</entry>
+ <entry>&lt;listitem&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;dl&gt;</entry>
+ <entry>&lt;variablelist&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;dt&gt;</entry>
+ <entry>&lt;term&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;dd&gt;</entry>
+ <entry>&lt;listitem&gt;</entry>
+ </row>
+
+ <row>
+ <entry>&lt;a href=""&gt;</entry>
+ <entry>&lt;ulink url=""&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;code&gt;</entry>
+ <entry>&lt;literal&gt;, &lt;programlisting&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;strong&gt;</entry>
+ <entry>&lt;emphasis&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;em&gt;</entry>
+ <entry>&lt;emphasis&gt;</entry>
+ </row>
+ <row>
+ <entry>"</entry>
+ <entry>&lt;quote&gt;</entry>
+ </row>
+ </tbody>
+</tgroup>
+</table>
+
+<para>
+ And examples of detailed markup for which there are no real HTML
+ equivalents are listed in the table below.
+</para>
+
+<table frame="all">
+<title>Docbook XML Element Use</title>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+
+ <thead>
+ <row>
+ <entry>Element</entry>
+ <entry>Use</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>&lt;structname&gt;</entry>
+ <entry>&lt;structname&gt;char_traits&lt;/structname&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;classname&gt;</entry>
+ <entry>&lt;classname&gt;string&lt;/classname&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;function&gt;</entry>
+ <entry>
+ <para>&lt;function&gt;clear()&lt;/function&gt;</para>
+ <para>&lt;function&gt;fs.clear()&lt;/function&gt;</para>
+ </entry>
+ </row>
+ <row>
+ <entry>&lt;type&gt;</entry>
+ <entry>&lt;type&gt;long long&lt;/type&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;varname&gt;</entry>
+ <entry>&lt;varname&gt;fs&lt;/varname&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;literal&gt;</entry>
+ <entry>
+ <para>&lt;literal&gt;-Weffc++&lt;/literal&gt;</para>
+ <para>&lt;literal&gt;rel_ops&lt;/literal&gt;</para>
+ </entry>
+ </row>
+ <row>
+ <entry>&lt;constant&gt;</entry>
+ <entry>
+ <para>&lt;constant&gt;_GNU_SOURCE&lt;/constant&gt;</para>
+ <para>&lt;constant&gt;3.0&lt;/constant&gt;</para>
+ </entry>
+ </row>
+ <row>
+ <entry>&lt;command&gt;</entry>
+ <entry>&lt;command&gt;g++&lt;/command&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;errortext&gt;</entry>
+ <entry>&lt;errortext&gt;In instantiation of&lt;/errortext&gt;</entry>
+ </row>
+ <row>
+ <entry>&lt;filename&gt;</entry>
+ <entry>
+ <para>&lt;filename class="headerfile"&gt;ctype.h&lt;/filename&gt;</para>
+ <para>&lt;filename class="directory"&gt;/home/gcc/build&lt;/filename&gt;</para>
+ <para>&lt;filename class="libraryfile"&gt;libstdc++.so&lt;/filename&gt;</para>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+</table>
+
+</section>
+</section>
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/evolution.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/evolution.xml
new file mode 100644
index 000000000..ce8c14e94
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/evolution.xml
@@ -0,0 +1,634 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.api" xreflabel="api">
+<?dbhtml filename="api.html"?>
+
+<info><title>API Evolution and Deprecation History</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>api</keyword>
+ <keyword>evolution</keyword>
+ <keyword>deprecation</keyword>
+ <keyword>history</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+A list of user-visible changes, in chronological order
+</para>
+
+<section xml:id="api.rel_300"><info><title><constant>3.0</constant></title></info>
+
+
+ <para>
+Extensions moved to <filename class="directory">include/ext</filename>.
+ </para>
+
+<para>
+Include files from the SGI/HP sources that pre-date the ISO standard
+are added. These files are placed into
+the <filename class="directory">include/backward</filename> directory and a deprecated warning
+is added that notifies on inclusion (<literal>-Wno-deprecated</literal>
+deactivates the warning.)
+</para>
+
+<para>Deprecated include <filename class="headerfile">backward/strstream</filename> added.</para>
+
+<para>Removal of include <filename class="headerfile">builtinbuf.h</filename>, <filename class="headerfile">indstream.h</filename>, <filename class="headerfile">parsestream.h</filename>, <filename class="headerfile">PlotFile.h</filename>, <filename class="headerfile">SFile.h</filename>, <filename class="headerfile">stdiostream.h</filename>, and <filename class="headerfile">stream.h</filename>.
+</para>
+
+
+
+</section>
+
+<section xml:id="api.rel_310"><info><title><constant>3.1</constant></title></info>
+
+ <para>
+ </para>
+
+<para>
+Extensions from SGI/HP moved from <code>namespace std</code>
+to <code>namespace __gnu_cxx</code>. As part of this, the following
+new includes are
+added: <filename class="headerfile">ext/algorithm</filename>, <filename class="headerfile">ext/functional</filename>, <filename class="headerfile">ext/iterator</filename>, <filename class="headerfile">ext/memory</filename>, and <filename class="headerfile">ext/numeric</filename>.
+</para>
+
+<para>
+Extensions to <code>basic_filebuf</code> introduced: <code>__gnu_cxx::enc_filebuf</code>, and <code>__gnu_cxx::stdio_filebuf</code>.
+</para>
+
+<para>
+Extensions to tree data structures added in <filename class="headerfile">ext/rb_tree</filename>.
+</para>
+
+<para>
+Removal of <filename class="headerfile">ext/tree</filename>, moved to <filename class="headerfile">backward/tree.h</filename>.
+</para>
+
+</section>
+
+<section xml:id="api.rel_320"><info><title><constant>3.2</constant></title></info>
+
+ <para>
+ </para>
+<para>Symbol versioning introduced for shared library.</para>
+
+<para>Removal of include <filename class="headerfile">backward/strstream.h</filename>.</para>
+
+<para>Allocator changes. Change <code>__malloc_alloc</code> to <code>malloc_allocator</code> and <code>__new_alloc</code> to <code>new_allocator</code>. </para>
+
+ <para> For GCC releases from 2.95 through the 3.1 series, defining
+ <literal>__USE_MALLOC</literal> on the gcc command line would change the
+ default allocation strategy to instead use <code> malloc</code> and
+ <function>free</function>. For the 3.2 and 3.3 release series the same
+ functionality was spelled <literal>_GLIBCXX_FORCE_NEW</literal>. From
+ GCC 3.4 onwards the functionality is enabled by setting
+ <literal>GLIBCXX_FORCE_NEW</literal> in the environment, see
+ <link linkend="manual.ext.allocator.mt">the mt allocator chapter</link>
+ for details.
+ </para>
+
+
+<para>Error handling in iostreams cleaned up, made consistent. </para>
+
+
+</section>
+
+<section xml:id="api.rel_330"><info><title><constant>3.3</constant></title></info>
+
+ <para>
+ </para>
+</section>
+
+<section xml:id="api.rel_340"><info><title><constant>3.4</constant></title></info>
+
+ <para>
+ </para>
+<para>
+Large file support.
+</para>
+
+<para> Extensions for generic characters and <code>char_traits</code> added in <filename class="headerfile">ext/pod_char_traits.h</filename>.
+</para>
+
+<para>
+Support for <code>wchar_t</code> specializations of <code>basic_filebuf</code> enhanced to support <code>UTF-8</code> and <code>Unicode</code>, depending on host. More hosts support basic <code>wchar_t</code> functionality.
+</para>
+
+<para>
+Support for <code>char_traits</code> beyond builtin types.
+</para>
+
+<para>
+Conformant <code>allocator</code> class and usage in containers. As
+part of this, the following extensions are
+added: <filename class="headerfile">ext/bitmap_allocator.h</filename>, <filename class="headerfile">ext/debug_allocator.h</filename>, <filename class="headerfile">ext/mt_allocator.h</filename>, <filename class="headerfile">ext/malloc_allocator.h</filename>,<filename class="headerfile">ext/new_allocator.h</filename>, <filename class="headerfile">ext/pool_allocator.h</filename>.
+</para>
+
+<para>
+This is a change from all previous versions, and may require
+source-level changes due to allocator-related changes to structures
+names and template parameters, filenames, and file locations. Some,
+like <code>__simple_alloc, __allocator, __alloc, </code> and <code>
+_Alloc_traits</code> have been removed.
+</para>
+
+<para>Default behavior of <code>std::allocator</code> has changed.</para>
+
+<para>
+ Previous versions prior to 3.4 cache allocations in a memory
+ pool, instead of passing through to call the global allocation
+ operators (i.e., <classname>__gnu_cxx::pool_allocator</classname>). More
+ recent versions default to the
+ simpler <classname>__gnu_cxx::new_allocator</classname>.
+</para>
+
+<para> Previously, all allocators were written to the SGI
+ style, and all STL containers expected this interface. This
+ interface had a traits class called <code>_Alloc_traits</code> that
+ attempted to provide more information for compile-time allocation
+ selection and optimization. This traits class had another allocator
+ wrapper, <code>__simple_alloc&lt;T,A&gt;</code>, which was a
+ wrapper around another allocator, A, which itself is an allocator
+ for instances of T. But wait, there's more:
+ <code>__allocator&lt;T,A&gt;</code> is another adapter. Many of
+ the provided allocator classes were SGI style: such classes can be
+ changed to a conforming interface with this wrapper:
+ <code>__allocator&lt;T, __alloc&gt;</code> is thus the same as
+ <code>allocator&lt;T&gt;</code>.
+ </para>
+
+ <para> The class <classname>allocator</classname> used the typedef
+ <type>__alloc</type> to select an underlying allocator that
+ satisfied memory allocation requests. The selection of this
+ underlying allocator was not user-configurable.
+ </para>
+
+<table frame="all">
+<title>Extension Allocators</title>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+
+ <thead>
+ <row>
+ <entry>Allocator (3.4)</entry>
+ <entry>Header (3.4)</entry>
+ <entry>Allocator (3.[0-3])</entry>
+ <entry>Header (3.[0-3])</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><classname>__gnu_cxx::new_allocator&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">ext/new_allocator.h</filename></entry>
+ <entry><classname>std::__new_alloc</classname></entry>
+ <entry><filename class="headerfile">memory</filename></entry>
+ </row>
+ <row>
+ <entry><classname>__gnu_cxx::malloc_allocator&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">ext/malloc_allocator.h</filename></entry>
+ <entry><classname>std::__malloc_alloc_template&lt;int&gt;</classname></entry>
+ <entry><filename class="headerfile">memory</filename></entry>
+ </row>
+ <row>
+ <entry><classname>__gnu_cxx::debug_allocator&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">ext/debug_allocator.h</filename></entry>
+ <entry><classname>std::debug_alloc&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">memory</filename></entry>
+ </row>
+ <row>
+ <entry><classname>__gnu_cxx::__pool_alloc&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">ext/pool_allocator.h</filename></entry>
+ <entry><classname>std::__default_alloc_template&lt;bool,int&gt;</classname></entry>
+ <entry><filename class="headerfile">memory</filename></entry>
+ </row>
+ <row>
+ <entry><classname>__gnu_cxx::__mt_alloc&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">ext/mt_allocator.h</filename></entry>
+ <entry> </entry>
+ <entry> </entry>
+ </row>
+ <row>
+ <entry><classname>__gnu_cxx::bitmap_allocator&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">ext/bitmap_allocator.h</filename></entry>
+ <entry> </entry>
+ <entry> </entry>
+ </row>
+ </tbody>
+</tgroup>
+</table>
+
+ <para> 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.
+ </para>
+
+<table frame="all">
+<title>Extension Allocators Continued</title>
+
+<tgroup cols="3" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+
+<thead>
+ <row>
+ <entry>Allocator</entry>
+ <entry>Include</entry>
+ <entry>Version</entry>
+ </row>
+</thead>
+
+<tbody>
+ <row>
+ <entry><classname>__gnu_cxx::array_allocator&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">ext/array_allocator.h</filename></entry>
+ <entry>4.0.0</entry>
+ </row>
+ <row>
+ <entry><classname>__gnu_cxx::throw_allocator&lt;T&gt;</classname></entry>
+ <entry><filename class="headerfile">ext/throw_allocator.h</filename></entry>
+ <entry>4.2.0</entry>
+ </row>
+</tbody>
+</tgroup>
+</table>
+
+
+<para>
+Debug mode first appears.
+</para>
+
+<para>
+Precompiled header support <acronym>PCH</acronym> support.
+</para>
+
+<para>
+Macro guard for changed, from <literal>_GLIBCPP_</literal> to <literal>_GLIBCXX_</literal>.
+</para>
+
+<para>
+Extension <filename class="headerfile">ext/stdio_sync_filebuf.h</filename> added.
+</para>
+
+<para>
+Extension <filename class="headerfile">ext/demangle.h</filename> added.
+</para>
+
+
+</section>
+
+<section xml:id="api.rel_400"><info><title><constant>4.0</constant></title></info>
+
+ <para>
+ </para>
+<para>
+TR1 features first appear.
+</para>
+
+<para>
+Extension allocator <filename class="headerfile">ext/array_allocator.h</filename> added.
+</para>
+
+<para>
+Extension <code>codecvt</code> specializations moved to <filename class="headerfile">ext/codecvt_specializations.h</filename>.
+</para>
+
+<para>
+Removal of <filename class="headerfile">ext/demangle.h</filename>.
+</para>
+
+
+</section>
+
+<section xml:id="api.rel_410"><info><title><constant>4.1</constant></title></info>
+
+ <para>
+ </para>
+
+
+<para>
+Removal of <filename class="headerfile">cassert</filename> from all standard headers: now has to be explicitly included for <code>std::assert</code> calls.
+</para>
+
+<para> Extensions for policy-based data structures first added. New includes,
+types, namespace <code>pb_assoc</code>.
+</para>
+
+
+
+<para> Extensions for typelists added in <filename class="headerfile">ext/typelist.h</filename>.
+</para>
+
+<para> Extension for policy-based <code>basic_string</code> first added: <code>__gnu_cxx::__versa_string</code> in <filename class="headerfile">ext/vstring.h</filename>.
+</para>
+
+</section>
+
+<section xml:id="api.rel_420"><info><title><constant>4.2</constant></title></info>
+
+ <para>
+ </para>
+
+
+<para> Default visibility attributes applied to <code>namespace std</code>. Support for <code>-fvisibility</code>.
+</para>
+
+<para>TR1 <filename class="headerfile">random</filename>, <filename class="headerfile">complex</filename>, and C compatibility headers added.</para>
+
+<para> Extensions for concurrent programming consolidated
+into <filename class="headerfile">ext/concurrence.h</filename> and <filename class="headerfile">ext/atomicity.h</filename>,
+including change of namespace to <code>__gnu_cxx</code> in some
+cases. Added types
+include <code>_Lock_policy</code>, <code>__concurrence_lock_error</code>, <code>__concurrence_unlock_error</code>, <code>__mutex</code>, <code>__scoped_lock</code>.</para>
+
+<para> Extensions for type traits consolidated
+into <filename class="headerfile">ext/type_traits.h</filename>. Additional traits are added
+(<code>__conditional_type</code>, <code>__enable_if</code>, others.)
+</para>
+
+<para> Extensions for policy-based data structures revised. New includes,
+types, namespace moved to <code>__pb_ds</code>.
+</para>
+
+<para> Extensions for debug mode modified: now nested in <code>namespace
+std::__debug</code> and extensions in <code>namespace
+__gnu_cxx::__debug</code>.</para>
+
+<para> Extensions added: <filename class="headerfile">ext/typelist.h</filename>
+and <filename class="headerfile">ext/throw_allocator.h</filename>.
+</para>
+
+</section>
+
+<section xml:id="api.rel_430"><info><title><constant>4.3</constant></title></info>
+
+ <para>
+ </para>
+
+
+<para>
+C++0X features first appear.
+</para>
+
+<para>TR1 <filename class="headerfile">regex</filename> and <filename class="headerfile">cmath</filename>'s mathematical special function added.
+</para>
+
+<para>
+Backward include edit.
+</para>
+<itemizedlist>
+ <listitem>
+ <para>Removed</para>
+ <para>
+<filename class="headerfile">algobase.h</filename> <filename class="headerfile">algo.h</filename> <filename class="headerfile">alloc.h</filename> <filename class="headerfile">bvector.h</filename> <filename class="headerfile">complex.h</filename>
+<filename class="headerfile">defalloc.h</filename> <filename class="headerfile">deque.h</filename> <filename class="headerfile">fstream.h</filename> <filename class="headerfile">function.h</filename> <filename class="headerfile">hash_map.h</filename> <filename class="headerfile">hash_set.h</filename>
+<filename class="headerfile">hashtable.h</filename> <filename class="headerfile">heap.h</filename> <filename class="headerfile">iomanip.h</filename> <filename class="headerfile">iostream.h</filename> <filename class="headerfile">istream.h</filename> <filename class="headerfile">iterator.h</filename>
+<filename class="headerfile">list.h</filename> <filename class="headerfile">map.h</filename> <filename class="headerfile">multimap.h</filename> <filename class="headerfile">multiset.h</filename> <filename class="headerfile">new.h</filename> <filename class="headerfile">ostream.h</filename> <filename class="headerfile">pair.h</filename> <filename class="headerfile">queue.h</filename> <filename class="headerfile">rope.h</filename> <filename class="headerfile">set.h</filename> <filename class="headerfile">slist.h</filename> <filename class="headerfile">stack.h</filename> <filename class="headerfile">streambuf.h</filename> <filename class="headerfile">stream.h</filename> <filename class="headerfile">tempbuf.h</filename>
+<filename class="headerfile">tree.h</filename> <filename class="headerfile">vector.h</filename>
+ </para>
+ </listitem>
+ <listitem>
+ <para>Added</para>
+ <para>
+ <filename class="headerfile">hash_map</filename> and <filename class="headerfile">hash_set</filename>
+ </para>
+ </listitem>
+ <listitem>
+ <para>Added in C++11</para>
+ <para>
+ <filename class="headerfile">auto_ptr.h</filename> and <filename class="headerfile">binders.h</filename>
+ </para>
+ </listitem>
+
+</itemizedlist>
+
+<para>
+Header dependency streamlining.
+</para>
+
+<itemizedlist>
+ <listitem><para><filename class="headerfile">algorithm</filename> no longer includes <filename class="headerfile">climits</filename>, <filename class="headerfile">cstring</filename>, or <filename class="headerfile">iosfwd</filename> </para></listitem>
+ <listitem><para><filename class="headerfile">bitset</filename> no longer includes <filename class="headerfile">istream</filename> or <filename class="headerfile">ostream</filename>, adds <filename class="headerfile">iosfwd</filename> </para></listitem>
+ <listitem><para><filename class="headerfile">functional</filename> no longer includes <filename class="headerfile">cstddef</filename></para></listitem>
+ <listitem><para><filename class="headerfile">iomanip</filename> no longer includes <filename class="headerfile">istream</filename>, <filename class="headerfile">istream</filename>, or <filename class="headerfile">functional</filename>, adds <filename class="headerfile">ioswd</filename> </para></listitem>
+ <listitem><para><filename class="headerfile">numeric</filename> no longer includes <filename class="headerfile">iterator</filename></para></listitem>
+ <listitem><para><filename class="headerfile">string</filename> no longer includes <filename class="headerfile">algorithm</filename> or <filename class="headerfile">memory</filename></para></listitem>
+
+ <listitem><para><filename class="headerfile">valarray</filename> no longer includes <filename class="headerfile">numeric</filename> or <filename class="headerfile">cstdlib</filename></para></listitem>
+ <listitem><para><filename class="headerfile">tr1/hashtable</filename> no longer includes <filename class="headerfile">memory</filename> or <filename class="headerfile">functional</filename></para></listitem>
+ <listitem><para><filename class="headerfile">tr1/memory</filename> no longer includes <filename class="headerfile">algorithm</filename></para></listitem>
+ <listitem><para><filename class="headerfile">tr1/random</filename> no longer includes <filename class="headerfile">algorithm</filename> or <filename class="headerfile">fstream</filename></para></listitem>
+</itemizedlist>
+
+<para>
+Debug mode for <filename class="headerfile">unordered_map</filename> and <filename class="headerfile">unordered_set</filename>.
+</para>
+
+<para>
+Parallel mode first appears.
+</para>
+
+<para>Variadic template implementations of items in <filename class="headerfile">tuple</filename> and
+ <filename class="headerfile">functional</filename>.
+</para>
+
+<para>Default <code>what</code> implementations give more elaborate
+ exception strings for <code>bad_cast</code>,
+ <code>bad_typeid</code>, <code>bad_exception</code>, and
+ <code>bad_alloc</code>.
+</para>
+
+<para>
+PCH binary files no longer installed. Instead, the source files are installed.
+</para>
+
+<para>
+Namespace pb_ds moved to __gnu_pb_ds.
+</para>
+
+</section>
+
+
+<section xml:id="api.rel_440"><info><title><constant>4.4</constant></title></info>
+
+ <para>
+ </para>
+
+<para>
+C++0X features.
+</para>
+
+<itemizedlist>
+<listitem>
+ <para>
+ Added.
+ </para>
+ <para>
+ <filename class="headerfile">atomic</filename>,
+ <filename class="headerfile">chrono</filename>,
+ <filename class="headerfile">condition_variable</filename>,
+ <filename class="headerfile">forward_list</filename>,
+ <filename class="headerfile">initializer_list</filename>,
+ <filename class="headerfile">mutex</filename>,
+ <filename class="headerfile">ratio</filename>,
+ <filename class="headerfile">thread</filename>
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Updated and improved.
+ </para>
+ <para>
+ <filename class="headerfile">algorithm</filename>,
+ <filename class="headerfile">system_error</filename>,
+ <filename class="headerfile">type_traits</filename>
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Use of the GNU extension namespace association converted to inline namespaces.
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Preliminary support for <classname>initializer_list</classname>
+ and defaulted and deleted constructors in container classes.
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ <classname>unique_ptr</classname>.
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Support for new character types <type>char16_t</type>
+ and <type>char32_t</type> added
+ to <classname>char_traits</classname>, <classname>basic_string</classname>, <classname>numeric_limits</classname>,
+ and assorted compile-time type traits.
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Support for string conversions <function>to_string</function>
+ and <function>to_wstring</function>.
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Member functions taking string arguments were added to iostreams
+ including <classname>basic_filebuf</classname>, <classname>basic_ofstream</classname>,
+ and <classname>basic_ifstream</classname>.
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Exception propagation support,
+ including <classname>exception_ptr</classname>, <function>current_exception</function>, <function>copy_exception</function>,
+ and <function>rethrow_exception</function>.
+ </para>
+</listitem>
+</itemizedlist>
+
+
+ <para>
+Uglification of <literal>try</literal> to <literal>__try</literal>
+and <literal>catch</literal> to <literal>__catch</literal>.
+ </para>
+
+ <para>
+Audit of internal mutex usage, conversion to functions returning static
+local mutex.
+ </para>
+
+<para> Extensions
+added: <filename class="headerfile">ext/pointer.h</filename>
+and <filename class="headerfile">ext/extptr_allocator.h</filename>. Support
+for non-standard pointer types has been added
+to <classname>vector</classname>
+and <classname>forward_list</classname>.
+</para>
+</section>
+
+<section xml:id="api.rel_450"><info><title><constant>4.5</constant></title></info>
+
+ <para>
+ </para>
+
+<para>
+C++0X features.
+</para>
+
+<itemizedlist>
+<listitem>
+ <para>
+ Added.
+ </para>
+ <para>
+ <filename class="headerfile">functional</filename>,
+ <filename class="headerfile">future</filename>,
+ <filename class="headerfile">random</filename>
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Updated and improved.
+ </para>
+ <para>
+ <filename class="headerfile">atomic</filename>,
+ <filename class="headerfile">system_error</filename>,
+ <filename class="headerfile">type_traits</filename>
+ </para>
+</listitem>
+
+<listitem>
+ <para>
+ Add support for explicit operators and standard layout types.
+ </para>
+</listitem>
+</itemizedlist>
+
+<para>
+Profile mode first appears.
+</para>
+
+<para>
+Support for decimal floating-point arithmetic, including <classname>decimal32</classname>, <classname>decimal64</classname>, and <classname>decimal128</classname>.
+</para>
+
+<para>
+Python pretty-printers are added for use with appropriately-advanced versions of <command>gdb</command>.
+</para>
+
+<para>
+Audit for application of function attributes notrow, const, pure, and noreturn.
+</para>
+
+<para>
+The default behavior for comparing typeinfo names changed, so
+in <filename class="headerfile">typeinfo</filename>, <literal>__GXX_MERGED_TYPEINFO_NAMES</literal>
+now defaults to zero.
+</para>
+
+<para> Extensions modified: <filename class="headerfile">ext/throw_allocator.h</filename>.
+</para>
+</section>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/extensions.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/extensions.xml
new file mode 100644
index 000000000..1f3da2fd9
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/extensions.xml
@@ -0,0 +1,582 @@
+<part xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext" xreflabel="Extensions">
+<?dbhtml filename="extensions.html"?>
+
+<info><title>
+ Extensions
+ <indexterm><primary>Extensions</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+<preface><info><title/></info>
+<?dbhtml filename="ext_preface.html"?>
+<para>
+ 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:
+</para>
+<orderedlist inheritnum="ignore" continuation="restarts">
+ <listitem>
+ <para>
+ Non-Standard means exactly that.
+ </para>
+ <para>
+ The behavior, and the very
+ existence, of these extensions may change with little or no
+ warning. (Ideally, the really good ones will appear in the next
+ revision of C++.) Also, other platforms, other compilers, other
+ versions of g++ or libstdc++ may not recognize these names, or
+ treat them differently, or...
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ You should know how to access these headers properly.
+ </para>
+ </listitem>
+</orderedlist>
+</preface>
+
+<!-- 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>
+ <para>In 1999, SGI added <emphasis>concept checkers</emphasis> to their implementation
+ of the STL: code which checked the template parameters of
+ instantiated pieces of the STL, in order to insure that the parameters
+ being used met the requirements of the standard. For example,
+ the Standard requires that types passed as template parameters to
+ <code>vector</code> be <quote>Assignable</quote> (which means what you think
+ it means). The checking was done during compilation, and none of
+ the code was executed at runtime.
+ </para>
+ <para>Unfortunately, the size of the compiler files grew significantly
+ as a result. The checking code itself was cumbersome. And bugs
+ were found in it on more than one occasion.
+ </para>
+ <para>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
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/concept_check/concept_check.htm">the
+ Boost libraries</link>, and we are pleased to incorporate it into the
+ GNU C++ library.
+ </para>
+ <para>The new version imposes a much smaller space overhead on the generated
+ object file. The checks are also cleaner and easier to read and
+ understand.
+ </para>
+ <para>They are off by default for all versions of GCC from 3.0 to 3.4 (the
+ latest release at the time of writing).
+ They can be enabled at configure time with
+ <link linkend="manual.intro.setup.configure"><literal>--enable-concept-checks</literal></link>.
+ You can enable them on a per-translation-unit basis with
+ <code>#define _GLIBCXX_CONCEPT_CHECKS</code> for GCC 3.4 and higher
+ (or with <code>#define _GLIBCPP_CONCEPT_CHECKS</code> for versions
+ 3.1, 3.2 and 3.3).
+ </para>
+
+ <para>Please note that the upcoming C++ standard has first-class
+ 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.
+ </para>
+
+</chapter>
+
+<!-- Chapter 02 : Debug Mode -->
+<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>
+
+<!-- Chapter 04 : Profile Mode -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="profile_mode.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>
+
+<!-- Chapter 06 : bitmap_allocator -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="bitmap_allocator.xml">
+</xi:include>
+
+<!-- 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 08 : HP/SGI -->
+<chapter xml:id="manual.ext.containers" xreflabel="Containers">
+ <info><title>HP/SGI Extensions</title></info>
+<?dbhtml filename="ext_containers.html"?>
+
+ <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>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
+ 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.
+</para>
+<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 <code>bitset&lt;N&gt;</code>, then their names and signatures are:
+</para>
+ <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);
+ </programlisting>
+ <para>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).
+</para>
+<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
+ "on" bit that is after <code>prev</code>, respectively:
+</para>
+ <programlisting>
+ size_t _Find_first() const;
+ size_t _Find_next (size_t prev) const;</programlisting>
+<para>The same caveat given for the _Unchecked_* functions applies here also.
+</para>
+ </section>
+
+
+ <section xml:id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep"><info><title>Deprecated</title></info>
+ <?dbhtml filename="ext_sgi.html"?>
+
+
+ <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 C++11, and
+ may be removed in future releases.
+ </para>
+
+ <para>The SGI headers</para>
+ <programlisting>
+ &lt;hash_map&gt;
+ &lt;hash_set&gt;
+ &lt;rope&gt;
+ &lt;slist&gt;
+ &lt;rb_tree&gt;
+ </programlisting>
+ <para>are all here;
+ <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.
+ <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
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/HashFunction.html">hashing
+ function</link> 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
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/hash.html">hash</link>.
+ You should specialize this functor for your class, or define your own,
+ before trying to use one of the hashing classes.
+ </para>
+ <para>The hashing classes support all the usual associative container
+ functions, as well as some extra constructors specifying the number
+ of buckets, etc.
+ </para>
+ <para>Why would you want to use a hashing class instead of the
+ <quote>normal</quote>implementations? Matt Austern writes:
+ </para>
+ <blockquote>
+ <para>
+ <emphasis>[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.
+ </emphasis>
+ </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 09 : Utilities -->
+<chapter xml:id="manual.ext.util" xreflabel="Utilities"><info><title>Utilities</title></info>
+<?dbhtml filename="ext_utilities.html"?>
+
+ <para>
+ 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>
+ </listitem>
+ <listitem>
+ <para>The functor <code>identity</code>, whose <code>operator()</code>
+ 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>.
+ </para>
+ </listitem>
+ <listitem>
+ <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>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>
+ <listitem><para>mem_fun adaptor helpers <code>mem_fun1</code> and
+ <code>mem_fun1_ref</code> are provided for backwards compatibility. </para></listitem>
+</itemizedlist>
+<para>
+ 20.4.1 can use several different allocators; they are described on the
+ main extensions page.
+</para>
+<para>
+ 20.4.3 is extended with a special version of
+ <code>get_temporary_buffer</code> taking a second argument. The
+ argument is a pointer, which is ignored, but can be used to specify
+ the template type (instead of using explicit function template
+ arguments like the standard version does). That is, in addition to
+</para>
+<programlisting>
+get_temporary_buffer&lt;int&gt;(5);
+</programlisting>
+
+<para>
+you can also use
+</para>
+
+<programlisting>
+get_temporary_buffer(5, (int*)0);
+</programlisting>
+<para>
+ 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>.
+</para>
+
+</chapter>
+
+<!-- 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
+ reference to which they assign their results, e.g.,
+</para>
+ <programlisting>
+ void count (first, last, value, n);</programlisting>
+<para>25.2 (mutating algorithms) is extended with two families of signatures,
+ random_sample and random_sample_n.
+</para>
+<para>25.2.1 (copy) is extended with
+</para>
+ <programlisting>
+ copy_n (_InputIter first, _Size count, _OutputIter result);</programlisting>
+<para>which copies the first 'count' elements at 'first' into 'result'.
+</para>
+<para>25.3 (sorting 'n' heaps 'n' stuff) is extended with some helper
+ predicates. Look in the doxygen-generated pages for notes on these.
+</para>
+ <itemizedlist>
+ <listitem><para><code>is_heap</code> tests whether or not a range is a heap.</para></listitem>
+ <listitem><para><code>is_sorted</code> tests whether or not a range is sorted in
+ nondescending order.</para></listitem>
+ </itemizedlist>
+<para>25.3.8 (lexicographical_compare) is extended with
+</para>
+ <programlisting>
+ lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1,
+ _InputIter2 first2, _InputIter2 last2)</programlisting>
+<para>which does... what?
+</para>
+
+</chapter>
+
+<!-- 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 <code>accumulate</code>,
+ are extended with the following functions:
+</para>
+ <programlisting>
+ power (x, n);
+ 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 (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 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
+ declare the same nested typedefs:
+</para>
+ <itemizedlist>
+ <listitem><para>input_iterator</para></listitem>
+ <listitem><para>output_iterator</para></listitem>
+ <listitem><para>forward_iterator</para></listitem>
+ <listitem><para>bidirectional_iterator</para></listitem>
+ <listitem><para>random_access_iterator</para></listitem>
+ </itemizedlist>
+<para>24.3.4 describes iterator operation <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.
+</para>
+
+</chapter>
+
+<!-- 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
+ "C" types like FILE*s and file descriptors.
+ </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
+ <code>FILE*</code>s and POSIX file descriptors.
+ Today the recommended way to use stdio types with libstdc++
+ IOStreams is via the <code>stdio_filebuf</code> class (see below),
+ but earlier releases provided slightly different mechanisms.
+ </para>
+ <itemizedlist>
+ <listitem><para>3.0.x <code>filebuf</code>s have another ctor with this signature:
+ <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:
+ <itemizedlist>
+ <listitem><para><code>__c_file_type* F </code>
+ // the __c_file_type typedef usually boils down to stdio's FILE
+ </para></listitem>
+ <listitem><para><code>ios_base::openmode M </code>
+ // same as all the other uses of openmode
+ </para></listitem>
+ <listitem><para><code>int_type B </code>
+ // buffer size, defaults to BUFSIZ if not specified
+ </para></listitem>
+ </itemizedlist>
+ For those wanting to use file descriptors instead of FILE*'s, I
+ invite you to contemplate the mysteries of C's <code>fdopen()</code>.
+ </para></listitem>
+ <listitem><para>In library snapshot 3.0.95 and later, <code>filebuf</code>s bring
+ back an old extension: the <code>fd()</code> member function. The
+ integer returned from this function can be used for whatever file
+ descriptors can be used for on your platform. Naturally, the
+ library cannot track what you do on your own with a file descriptor,
+ so if you perform any I/O directly, don't expect the library to be
+ aware of it.
+ </para></listitem>
+ <listitem><para>Beginning with 3.1, the extra <code>filebuf</code> constructor and
+ the <code>fd()</code> function were removed from the standard
+ filebuf. Instead, <code>&lt;ext/stdio_filebuf.h&gt;</code> 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.
+ </para></listitem>
+ </itemizedlist>
+
+ </section>
+</chapter>
+
+<!-- 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
+ <quote>demangling.</quote>
+ </para>
+ <para>
+ If you have read the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01115.html">source
+ documentation for <code>namespace abi</code></link> then you are
+ aware of the cross-vendor C++ ABI in use by GCC. One of the
+ exposed functions is used for demangling,
+ <code>abi::__cxa_demangle</code>.
+ </para>
+ <para>
+ In programs like <command>c++filt</command>, the linker, and other tools
+ have the ability to decode C++ ABI names, and now so can you.
+ </para>
+ <para>
+ (The function itself might use different demanglers, but that's the
+ whole point of abstract interfaces. If we change the implementation,
+ you won't notice.)
+ </para>
+ <para>
+ Probably the only times you'll be interested in demangling at runtime
+ are when you're seeing <code>typeid</code> strings in RTTI, or when
+ you're handling the runtime-support exception classes. For example:
+ </para>
+ <programlisting>
+#include &lt;exception&gt;
+#include &lt;iostream&gt;
+#include &lt;cxxabi.h&gt;
+
+struct empty { };
+
+template &lt;typename T, int N&gt;
+ struct bar { };
+
+
+int main()
+{
+ int status;
+ char *realname;
+
+ // exception classes not in &lt;stdexcept&gt;, thrown by the implementation
+ // instead of the user
+ std::bad_exception e;
+ realname = abi::__cxa_demangle(e.what(), 0, 0, &amp;status);
+ std::cout &lt;&lt; e.what() &lt;&lt; "\t=&gt; " &lt;&lt; realname &lt;&lt; "\t: " &lt;&lt; status &lt;&lt; '\n';
+ free(realname);
+
+
+ // typeid
+ bar&lt;empty,17&gt; u;
+ const std::type_info &amp;ti = typeid(u);
+
+ realname = abi::__cxa_demangle(ti.name(), 0, 0, &amp;status);
+ std::cout &lt;&lt; ti.name() &lt;&lt; "\t=&gt; " &lt;&lt; realname &lt;&lt; "\t: " &lt;&lt; status &lt;&lt; '\n';
+ free(realname);
+
+ return 0;
+}
+ </programlisting>
+ <para>
+ This prints
+ </para>
+
+ <screen>
+ <computeroutput>
+ St13bad_exception =&gt; std::bad_exception : 0
+ 3barI5emptyLi17EE =&gt; bar&lt;empty, 17&gt; : 0
+ </computeroutput>
+ </screen>
+
+ <para>
+ The demangler interface is described in the source documentation
+ linked to above. It is actually written in C, so you don't need to
+ 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.)
+ </para>
+</chapter>
+
+<!-- Chapter 15 : Concurrency -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="concurrency_extensions.xml">
+</xi:include>
+
+</part>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/internals.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/internals.xml
new file mode 100644
index 000000000..7acec6bbf
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/internals.xml
@@ -0,0 +1,542 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.internals" xreflabel="Portin Internals">
+<?dbhtml filename="internals.html"?>
+
+<info><title>Porting to New Hardware or Operating Systems</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>internals</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+</para>
+
+
+<para>This document explains how to port libstdc++ (the GNU C++ library) to
+a new target.
+</para>
+
+ <para>In order to make the GNU C++ library (libstdc++) work with a new
+target, you must edit some configuration files and provide some new
+header files. Unless this is done, libstdc++ will use generic
+settings which may not be correct for your target; even if they are
+correct, they will likely be inefficient.
+ </para>
+
+ <para>Before you get started, make sure that you have a working C library on
+your target. The C library need not precisely comply with any
+particular standard, but should generally conform to the requirements
+imposed by the ANSI/ISO standard.
+ </para>
+
+ <para>In addition, you should try to verify that the C++ compiler generally
+works. It is difficult to test the C++ compiler without a working
+library, but you should at least try some minimal test cases.
+ </para>
+
+ <para>(Note that what we think of as a "target," the library refers to as
+a "host." The comment at the top of <code>configure.ac</code> explains why.)
+ </para>
+
+
+<section xml:id="internals.os"><info><title>Operating System</title></info>
+
+
+<para>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>config/os</code> hierarchy. For example, the IRIX
+configuration files are all in <code>config/os/irix</code>. There is no set
+way to organize the OS configuration directory. For example,
+<code>config/os/solaris/solaris-2.6</code> and
+<code>config/os/solaris/solaris-2.7</code> are used as configuration
+directories for these two versions of Solaris. On the other hand, both
+Solaris 2.7 and Solaris 2.8 use the <code>config/os/solaris/solaris-2.7</code>
+directory. The important information is that there needs to be a
+directory under <code>config/os</code> to store the files for your operating
+system.
+</para>
+
+ <para>You might have to change the <code>configure.host</code> file to ensure that
+your new directory is activated. Look for the switch statement that sets
+<code>os_include_dir</code>, and add a pattern to handle your operating system
+if the default will not suffice. The switch statement switches on only
+the OS portion of the standard target triplet; e.g., the <code>solaris2.8</code>
+in <code>sparc-sun-solaris2.8</code>. If the new directory is named after the
+OS portion of the triplet (the default), then nothing needs to be changed.
+ </para>
+
+ <para>The first file to create in this directory, should be called
+<code>os_defines.h</code>. This file contains basic macro definitions
+that are required to allow the C++ library to work with your C library.
+ </para>
+
+ <para>Several libstdc++ source files unconditionally define the macro
+<code>_POSIX_SOURCE</code>. On many systems, defining this macro causes
+large portions of the C library header files to be eliminated
+at preprocessing time. Therefore, you may have to <code>#undef</code> this
+macro, or define other macros (like <code>_LARGEFILE_SOURCE</code> or
+<code>__EXTENSIONS__</code>). You won't know what macros to define or
+undefine at this point; you'll have to try compiling the library and
+seeing what goes wrong. If you see errors about calling functions
+that have not been declared, look in your C library headers to see if
+the functions are declared there, and then figure out what macros you
+need to define. You will need to add them to the
+<code>CPLUSPLUS_CPP_SPEC</code> macro in the GCC configuration file for your
+target. It will not work to simply define these macros in
+<code>os_defines.h</code>.
+ </para>
+
+ <para>At this time, there are a few libstdc++-specific macros which may be
+defined:
+ </para>
+
+ <para><code>_GLIBCXX_USE_C99_CHECK</code> may be defined to 1 to check C99
+function declarations (which are not covered by specialization below)
+found in system headers against versions found in the library headers
+derived from the standard.
+ </para>
+
+ <para><code>_GLIBCXX_USE_C99_DYNAMIC</code> may be defined to an expression that
+yields 0 if and only if the system headers are exposing proper support
+for C99 functions (which are not covered by specialization below). If
+defined, it must be 0 while bootstrapping the compiler/rebuilding the
+library.
+ </para>
+
+ <para><code>_GLIBCXX_USE_C99_LONG_LONG_CHECK</code> may be defined to 1 to check
+the set of C99 long long function declarations found in system headers
+against versions found in the library headers derived from the
+standard.
+
+ </para>
+ <para><code>_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC</code> may be defined to an
+expression that yields 0 if and only if the system headers are
+exposing proper support for the set of C99 long long functions. If
+defined, it must be 0 while bootstrapping the compiler/rebuilding the
+library.
+ </para>
+ <para><code>_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC</code> may be defined to an
+expression that yields 0 if and only if the system headers
+are exposing proper support for the related set of macros. If defined,
+it must be 0 while bootstrapping the compiler/rebuilding the library.
+ </para>
+ <para><code>_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK</code> may be defined
+to 1 to check the related set of function declarations found in system
+headers against versions found in the library headers derived from
+the standard.
+ </para>
+ <para><code>_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC</code> may be defined
+to an expression that yields 0 if and only if the system headers
+are exposing proper support for the related set of functions. If defined,
+it must be 0 while bootstrapping the compiler/rebuilding the library.
+ </para>
+ <para>Finally, you should bracket the entire file in an include-guard, like
+this:
+ </para>
+
+<programlisting>
+
+#ifndef _GLIBCXX_OS_DEFINES
+#define _GLIBCXX_OS_DEFINES
+...
+#endif
+</programlisting>
+
+ <para>We recommend copying an existing <code>os_defines.h</code> to use as a
+starting point.
+ </para>
+</section>
+
+
+<section xml:id="internals.cpu"><info><title>CPU</title></info>
+
+
+<para>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>config/cpu</code> hierarchy. Much like the <link linkend="internals.os">Operating system</link> setup,
+there are no strict rules on how to organize the CPU configuration
+directory, but careful naming choices will allow the configury to find your
+setup files without explicit help.
+</para>
+
+ <para>We recommend that for a target triplet <code>&lt;CPU&gt;-&lt;vendor&gt;-&lt;OS&gt;</code>, you
+name your configuration directory <code>config/cpu/&lt;CPU&gt;</code>. If you do this,
+the configury will find the directory by itself. Otherwise you will need to
+edit the <code>configure.host</code> file and, in the switch statement that sets
+<code>cpu_include_dir</code>, add a pattern to handle your chip.
+ </para>
+
+ <para>Note that some chip families share a single configuration directory, for
+example, <code>alpha</code>, <code>alphaev5</code>, and <code>alphaev6</code> all use the
+<code>config/cpu/alpha</code> directory, and there is an entry in the
+<code>configure.host</code> switch statement to handle this.
+ </para>
+
+ <para>The <code>cpu_include_dir</code> sets default locations for the files controlling
+<link linkend="internals.thread_safety">Thread safety</link> and <link linkend="internals.numeric_limits">Numeric limits</link>, if the defaults are not
+appropriate for your chip.
+ </para>
+
+</section>
+
+
+<section xml:id="internals.char_types"><info><title>Character Types</title></info>
+
+
+<para>The library requires that you provide three header files to implement
+character classification, analogous to that provided by the C libraries
+<code>&lt;ctype.h&gt;</code> header. You can model these on the files provided in
+<code>config/os/generic</code>. However, these files will almost
+certainly need some modification.
+</para>
+
+ <para>The first file to write is <code>ctype_base.h</code>. This file provides
+some very basic information about character classification. The libstdc++
+library assumes that your C library implements <code>&lt;ctype.h&gt;</code> by using
+a table (indexed by character code) containing integers, where each of
+these integers is a bit-mask indicating whether the character is
+upper-case, lower-case, alphabetic, etc. The <code>ctype_base.h</code>
+file gives the type of the integer, and the values of the various bit
+masks. You will have to peer at your own <code>&lt;ctype.h&gt;</code> to figure out
+how to define the values required by this file.
+ </para>
+
+ <para>The <code>ctype_base.h</code> header file does not need include guards.
+It should contain a single <code>struct</code> definition called
+<code>ctype_base</code>. This <code>struct</code> should contain two type
+declarations, and one enumeration declaration, like this example, taken
+from the IRIX configuration:
+ </para>
+
+<programlisting>
+ struct ctype_base
+ {
+ typedef unsigned int mask;
+ typedef int* __to_type;
+
+ enum
+ {
+ space = _ISspace,
+ print = _ISprint,
+ cntrl = _IScntrl,
+ upper = _ISupper,
+ lower = _ISlower,
+ alpha = _ISalpha,
+ digit = _ISdigit,
+ punct = _ISpunct,
+ xdigit = _ISxdigit,
+ alnum = _ISalnum,
+ graph = _ISgraph
+ };
+ };
+</programlisting>
+
+<para>The <code>mask</code> type is the type of the elements in the table. If your
+C library uses a table to map lower-case numbers to upper-case numbers,
+and vice versa, you should define <code>__to_type</code> to be the type of the
+elements in that table. If you don't mind taking a minor performance
+penalty, or if your library doesn't implement <code>toupper</code> and
+<code>tolower</code> in this way, you can pick any pointer-to-integer type,
+but you must still define the type.
+</para>
+
+ <para>The enumeration should give definitions for all the values in the above
+example, using the values from your native <code>&lt;ctype.h&gt;</code>. They can
+be given symbolically (as above), or numerically, if you prefer. You do
+not have to include <code>&lt;ctype.h&gt;</code> in this header; it will always be
+included before <code>ctype_base.h</code> is included.
+ </para>
+
+ <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>
+ctype&lt;char&gt;::ctype(const mask* __table = 0, bool __del = false,
+ size_t __refs = 0)
+ : _Ctype_nois&lt;char&gt;(__refs), _M_del(__table != 0 &amp;&amp; __del),
+ _M_toupper(NULL),
+ _M_tolower(NULL),
+ _M_ctable(NULL),
+ _M_table(!__table
+ ? (const mask*) (__libc_attr._ctype_tbl-&gt;_class + 1)
+ : __table)
+ { }
+</programlisting>
+
+<para>There are two parts of this that you might choose to alter. The first,
+and most important, is the line involving <code>__libc_attr</code>. That is
+IRIX system-dependent code that gets the base of the table mapping
+character codes to attributes. You need to substitute code that obtains
+the address of this table on your system. If you want to use your
+operating system's tables to map upper-case letters to lower-case, and
+vice versa, you should initialize <code>_M_toupper</code> and
+<code>_M_tolower</code> with those tables, in similar fashion.
+</para>
+
+ <para>Now, you have to write two functions to convert from upper-case to
+lower-case, and vice versa. Here are the IRIX versions:
+ </para>
+
+<programlisting>
+ char
+ ctype&lt;char&gt;::do_toupper(char __c) const
+ { return _toupper(__c); }
+
+ char
+ ctype&lt;char&gt;::do_tolower(char __c) const
+ { return _tolower(__c); }
+</programlisting>
+
+<para>Your C library provides equivalents to IRIX's <code>_toupper</code> and
+<code>_tolower</code>. If you initialized <code>_M_toupper</code> and
+<code>_M_tolower</code> above, then you could use those tables instead.
+</para>
+
+ <para>Finally, you have to provide two utility functions that convert strings
+of characters. The versions provided here will always work - but you
+could use specialized routines for greater performance if you have
+machinery to do that on your system:
+ </para>
+
+<programlisting>
+ const char*
+ ctype&lt;char&gt;::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low &lt; __high)
+ {
+ *__low = do_toupper(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ const char*
+ ctype&lt;char&gt;::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low &lt; __high)
+ {
+ *__low = do_tolower(*__low);
+ ++__low;
+ }
+ return __high;
+ }
+</programlisting>
+
+ <para>You must also provide the <code>ctype_inline.h</code> file, which
+contains a few more functions. On most systems, you can just copy
+<code>config/os/generic/ctype_inline.h</code> and use it on your system.
+ </para>
+
+ <para>In detail, the functions provided test characters for particular
+properties; they are analogous to the functions like <code>isalpha</code> and
+<code>islower</code> provided by the C library.
+ </para>
+
+ <para>The first function is implemented like this on IRIX:
+ </para>
+
+<programlisting>
+ bool
+ ctype&lt;char&gt;::
+ is(mask __m, char __c) const throw()
+ { return (_M_table)[(unsigned char)(__c)] &amp; __m; }
+</programlisting>
+
+<para>The <code>_M_table</code> is the table passed in above, in the constructor.
+This is the table that contains the bitmasks for each character. The
+implementation here should work on all systems.
+</para>
+
+ <para>The next function is:
+ </para>
+
+<programlisting>
+ const char*
+ ctype&lt;char&gt;::
+ is(const char* __low, const char* __high, mask* __vec) const throw()
+ {
+ while (__low &lt; __high)
+ *__vec++ = (_M_table)[(unsigned char)(*__low++)];
+ return __high;
+ }
+</programlisting>
+
+<para>This function is similar; it copies the masks for all the characters
+from <code>__low</code> up until <code>__high</code> into the vector given by
+<code>__vec</code>.
+</para>
+
+ <para>The last two functions again are entirely generic:
+ </para>
+
+<programlisting>
+ const char*
+ ctype&lt;char&gt;::
+ scan_is(mask __m, const char* __low, const char* __high) const throw()
+ {
+ while (__low &lt; __high &amp;&amp; !this-&gt;is(__m, *__low))
+ ++__low;
+ return __low;
+ }
+
+ const char*
+ ctype&lt;char&gt;::
+ scan_not(mask __m, const char* __low, const char* __high) const throw()
+ {
+ while (__low &lt; __high &amp;&amp; this-&gt;is(__m, *__low))
+ ++__low;
+ return __low;
+ }
+</programlisting>
+
+</section>
+
+
+<section xml:id="internals.thread_safety"><info><title>Thread Safety</title></info>
+
+
+<para>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
+multi-threaded.
+</para>
+
+ <para>If you want to provide custom, safe, versions of these functions, there
+are two distinct approaches. One is to provide a version for your CPU,
+using assembly language constructs. The other is to use the
+thread-safety primitives in your operating system. In either case, you
+make a file called <code>atomicity.h</code>, and the variable
+<code>ATOMICITYH</code> must point to this file.
+ </para>
+
+ <para>If you are using the assembly-language approach, put this code in
+<code>config/cpu/&lt;chip&gt;/atomicity.h</code>, where chip is the name of
+your processor (see <link linkend="internals.cpu">CPU</link>). No additional changes are necessary to
+locate the file in this case; <code>ATOMICITYH</code> will be set by default.
+ </para>
+
+ <para>If you are using the operating system thread-safety primitives approach,
+you can also put this code in the same CPU directory, in which case no more
+work is needed to locate the file. For examples of this approach,
+see the <code>atomicity.h</code> file for IRIX or IA64.
+ </para>
+
+ <para>Alternatively, if the primitives are more closely related to the OS
+than they are to the CPU, you can put the <code>atomicity.h</code> file in
+the <link linkend="internals.os">Operating system</link> directory instead. In this case, you must
+edit <code>configure.host</code>, and in the switch statement that handles
+operating systems, override the <code>ATOMICITYH</code> variable to point to
+the appropriate <code>os_include_dir</code>. For examples of this approach,
+see the <code>atomicity.h</code> file for AIX.
+ </para>
+
+ <para>With those bits out of the way, you have to actually write
+<code>atomicity.h</code> itself. This file should be wrapped in an
+include guard named <code>_GLIBCXX_ATOMICITY_H</code>. It should define one
+type, and two functions.
+ </para>
+
+ <para>The type is <code>_Atomic_word</code>. Here is the version used on IRIX:
+ </para>
+
+<programlisting>
+typedef long _Atomic_word;
+</programlisting>
+
+<para>This type must be a signed integral type supporting atomic operations.
+If you're using the OS approach, use the same type used by your system's
+primitives. Otherwise, use the type for which your CPU provides atomic
+primitives.
+</para>
+
+ <para>Then, you must provide two functions. The bodies of these functions
+must be equivalent to those provided here, but using atomic operations:
+ </para>
+
+<programlisting>
+ static inline _Atomic_word
+ __attribute__ ((__unused__))
+ __exchange_and_add (_Atomic_word* __mem, int __val)
+ {
+ _Atomic_word __result = *__mem;
+ *__mem += __val;
+ return __result;
+ }
+
+ static inline void
+ __attribute__ ((__unused__))
+ __atomic_add (_Atomic_word* __mem, int __val)
+ {
+ *__mem += __val;
+ }
+</programlisting>
+
+</section>
+
+
+<section xml:id="internals.numeric_limits"><info><title>Numeric Limits</title></info>
+
+
+<para>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
+types and let the library do the rest. For information about the
+macros to define, see the top of <code>include/bits/std_limits.h</code>.
+</para>
+
+ <para>If you need to define any macros, you can do so in <code>os_defines.h</code>.
+However, if all operating systems for your CPU are likely to use the
+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>cpu_limits.h</code> in
+your CPU configuration directory (see <link linkend="internals.cpu">CPU</link>).
+ </para>
+
+</section>
+
+
+<section xml:id="internals.libtool"><info><title>Libtool</title></info>
+
+
+<para>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.
+</para>
+
+ <para>Some parts of the libstdc++ library are compiled with the libtool
+<code>--tags CXX</code> option (the C++ definitions for libtool). Therefore,
+<code>ltcf-cxx.sh</code> in the top-level directory needs to have the correct
+logic to compile and archive objects equivalent to the C version of libtool,
+<code>ltcf-c.sh</code>. Some libtool targets have definitions for C but not
+for C++, or C++ definitions which have not been kept up to date.
+ </para>
+
+ <para>The C++ run-time library contains initialization code that needs to be
+run as the library is loaded. Often, that requires linking in special
+object files when the C++ library is built as a shared library, or
+taking other system-specific actions.
+ </para>
+
+ <para>The libstdc++ library is linked with the C version of libtool, even
+though it is a C++ library. Therefore, the C version of libtool needs to
+ensure that the run-time library initializers are run. The usual way to
+do this is to build the library using <code>gcc -shared</code>.
+ </para>
+
+ <para>If you need to change how the library is linked, look at
+<code>ltcf-c.sh</code> in the top-level directory. Find the switch statement
+that sets <code>archive_cmds</code>. Here, adjust the setting for your
+operating system.
+ </para>
+
+
+</section>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/intro.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/intro.xml
new file mode 100644
index 000000000..027e39034
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/intro.xml
@@ -0,0 +1,874 @@
+<part xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="manual.intro" xreflabel="Introduction">
+<?dbhtml filename="intro.html"?>
+
+<info><title>
+ Introduction
+ <indexterm><primary>Introduction</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+<!-- Chapter 01 : Status -->
+<chapter xml:id="manual.intro.status" xreflabel="Status"><info><title>Status</title></info>
+ <?dbhtml filename="status.html"?>
+
+
+ <!-- Section 01 : Implementation Status -->
+ <section xml:id="manual.intro.status.iso" xreflabel="Status"><info><title>Implementation Status</title></info>
+
+
+ <!-- Section 01.1 : Status C++ 1998 -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxx1998.xml">
+ </xi:include>
+
+ <!-- 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 -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxxtr1.xml">
+ </xi:include>
+
+ <!-- Section 01.4 : Status C++ TR24733 -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxxtr24733.xml">
+ </xi:include>
+ </section>
+
+ <!-- Section 02 : License -->
+ <section xml:id="manual.intro.status.license" xreflabel="License"><info><title>License</title></info>
+ <?dbhtml filename="license.html"?>
+
+ <para>
+ There are two licenses affecting GNU libstdc++: one for the code,
+ and one for the documentation.
+ </para>
+
+ <para>
+ There is a license section in the FAQ regarding common <link linkend="faq.license">questions</link>. If you have more
+ questions, ask the FSF or the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/lists.html">gcc mailing list</link>.
+ </para>
+
+ <section xml:id="manual.intro.status.license.gpl" xreflabel="License GPL"><info><title>The Code: GPL</title></info>
+
+
+ <para>
+ The source code is distributed under the <link linkend="appendix.gpl-3.0">GNU General Public License version 3</link>,
+ with the addition under section 7 of an exception described in
+ the <quote>GCC Runtime Library Exception, version 3.1</quote>
+ as follows (or see the file COPYING.RUNTIME):
+ </para>
+
+ <literallayout class="normal">
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">Free Software Foundation, Inc.</link>
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+ </literallayout>
+
+ <para>
+ Hopefully that text is self-explanatory. If it isn't, you need to speak
+ to your lawyer, or the Free Software Foundation.
+ </para>
+ </section>
+
+ <section xml:id="manual.intro.status.license.fdl" xreflabel="License FDL"><info><title>The Documentation: GPL, FDL</title></info>
+
+
+ <para>
+ 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
+ <link linkend="appendix.gfdl-1.3"> GNU Free Documentation
+ License version 1.3</link>. There are no Front-Cover Texts, no
+ Back-Cover Texts, and no Invariant Sections.
+ </para>
+
+ <para>
+ For documentation generated by doxygen or other automated tools
+ via processing source code comments and markup, the original source
+ code license applies to the generated files. Thus, the doxygen
+ documents are licensed <link linkend="appendix.gpl-3.0">GPL</link>.
+ </para>
+
+ <para>
+ If you plan on making copies of the documentation, please let us know.
+ We can probably offer suggestions.
+ </para>
+ </section>
+
+ </section>
+
+ <!-- Section 03 : Known Bugs -->
+ <section xml:id="manual.intro.status.bugs" xreflabel="Bugs"><info><title>Bugs</title></info>
+ <?dbhtml filename="bugs.html"?>
+
+
+ <section xml:id="manual.intro.status.bugs.impl" xreflabel="Bugs impl"><info><title>Implementation Bugs</title></info>
+
+ <para>
+ Information on known bugs, details on efforts to fix them, and
+ fixed bugs are all available as part of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/bugs/">GCC bug tracking system</link>,
+ with the category set to <literal>libstdc++</literal>.
+ </para>
+ </section>
+
+ <section xml:id="manual.intro.status.bugs.iso" xreflabel="Bugs iso"><info><title>Standard Bugs</title></info>
+
+ <para>
+ Everybody's got issues. Even the C++ Standard Library.
+ </para>
+ <para>
+ The Library Working Group, or LWG, is the ISO subcommittee responsible
+ for making changes to the library. They periodically publish an
+ Issues List containing problems and possible solutions. As they reach
+ a consensus on proposed solutions, we often incorporate the solution.
+ </para>
+ <para>
+ Here are the issues which have resulted in code changes to the library.
+ The links are to the specific defect reports from a <emphasis>partial
+ copy</emphasis> of the Issues List. You can read the full version online
+ at the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">ISO C++
+ Committee homepage</link>, linked to on the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/readings.html">GCC "Readings"
+ page</link>. If
+ you spend a lot of time reading the issues, we recommend downloading
+ the ZIP file and reading them locally.
+ </para>
+ <para>
+ (NB: <emphasis>partial copy</emphasis> means that not all
+ links within the lwg-*.html pages will work. Specifically,
+ links to defect reports that have not been accorded full DR
+ status will probably break. Rather than trying to mirror the
+ entire issues list on our overworked web server, we recommend
+ you go to the LWG homepage instead.)
+ </para>
+ <para>
+ If a DR is not listed here, we may simply not have gotten to
+ it yet; feel free to submit a patch. Search the include/bits
+ and src directories for appearances of
+ <constant>_GLIBCXX_RESOLVE_LIB_DEFECTS</constant> for examples
+ of style. Note that we usually do not make changes to the
+ code until an issue has reached <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-active.html#DR">DR</link> status.
+ </para>
+
+ <variablelist>
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#5">5</link>:
+ <emphasis>string::compare specification questionable</emphasis>
+ </term>
+ <listitem><para>This should be two overloaded functions rather than a single function.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#17">17</link>:
+ <emphasis>Bad bool parsing</emphasis>
+ </term>
+ <listitem><para>Apparently extracting Boolean values was messed up...
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#19">19</link>:
+ <emphasis>"Noconv" definition too vague</emphasis>
+ </term>
+ <listitem><para>If <code>codecvt::do_in</code> returns <code>noconv</code> there are
+ no changes to the values in <code>[to, to_limit)</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#22">22</link>:
+ <emphasis>Member open vs flags</emphasis>
+ </term>
+ <listitem><para>Re-opening a file stream does <emphasis>not</emphasis> clear the state flags.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#23">23</link>:
+ <emphasis>Num_get overflow result</emphasis>
+ </term>
+ <listitem><para>Implement the proposed resolution.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#25">25</link>:
+ <emphasis>String operator&lt;&lt; uses width() value wrong</emphasis>
+ </term>
+ <listitem><para>Padding issues.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#48">48</link>:
+ <emphasis>Use of non-existent exception constructor</emphasis>
+ </term>
+ <listitem><para>An instance of <code>ios_base::failure</code> is constructed instead.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#49">49</link>:
+ <emphasis>Underspecification of ios_base::sync_with_stdio</emphasis>
+ </term>
+ <listitem><para>The return type is the <emphasis>previous</emphasis> state of synchronization.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#50">50</link>:
+ <emphasis>Copy constructor and assignment operator of ios_base</emphasis>
+ </term>
+ <listitem><para>These members functions are declared <code>private</code> and are
+ thus inaccessible. Specifying the correct semantics of
+ "copying stream state" was deemed too complicated.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#60">60</link>:
+ <emphasis>What is a formatted input function?</emphasis>
+ </term>
+ <listitem><para>This DR made many widespread changes to <code>basic_istream</code>
+ and <code>basic_ostream</code> all of which have been implemented.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#63">63</link>:
+ <emphasis>Exception-handling policy for unformatted output</emphasis>
+ </term>
+ <listitem><para>Make the policy consistent with that of formatted input, unformatted
+ input, and formatted output.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#68">68</link>:
+ <emphasis>Extractors for char* should store null at end</emphasis>
+ </term>
+ <listitem><para>And they do now. An editing glitch in the last item in the list of
+ [27.6.1.2.3]/7.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#74">74</link>:
+ <emphasis>Garbled text for codecvt::do_max_length</emphasis>
+ </term>
+ <listitem><para>The text of the standard was gibberish. Typos gone rampant.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#75">75</link>:
+ <emphasis>Contradiction in codecvt::length's argument types</emphasis>
+ </term>
+ <listitem><para>Change the first parameter to <code>stateT&amp;</code> and implement
+ the new effects paragraph.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#83">83</link>:
+ <emphasis>string::npos vs. string::max_size()</emphasis>
+ </term>
+ <listitem><para>Safety checks on the size of the string should test against
+ <code>max_size()</code> rather than <code>npos</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#90">90</link>:
+ <emphasis>Incorrect description of operator&gt;&gt; for strings</emphasis>
+ </term>
+ <listitem><para>The effect contain <code>isspace(c,getloc())</code> which must be
+ replaced by <code>isspace(c,is.getloc())</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#91">91</link>:
+ <emphasis>Description of operator&gt;&gt; and getline() for string&lt;&gt;
+ might cause endless loop</emphasis>
+ </term>
+ <listitem><para>They behave as a formatted input function and as an unformatted
+ input function, respectively (except that <code>getline</code> is
+ not required to set <code>gcount</code>).
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#103">103</link>:
+ <emphasis>set::iterator is required to be modifiable, but this allows
+ modification of keys.</emphasis>
+ </term>
+ <listitem><para>For associative containers where the value type is the same as
+ the key type, both <code>iterator</code> and <code>const_iterator
+ </code> are constant iterators.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#109">109</link>:
+ <emphasis>Missing binders for non-const sequence elements</emphasis>
+ </term>
+ <listitem><para>The <code>binder1st</code> and <code>binder2nd</code> didn't have an
+ <code>operator()</code> taking a non-const parameter.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#110">110</link>:
+ <emphasis>istreambuf_iterator::equal not const</emphasis>
+ </term>
+ <listitem><para>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.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#117">117</link>:
+ <emphasis>basic_ostream uses nonexistent num_put member functions</emphasis>
+ </term>
+ <listitem><para><code>num_put::put()</code> was overloaded on the wrong types.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#118">118</link>:
+ <emphasis>basic_istream uses nonexistent num_get member functions</emphasis>
+ </term>
+ <listitem><para>Same as 117, but for <code>num_get::get()</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#129">129</link>:
+ <emphasis>Need error indication from seekp() and seekg()</emphasis>
+ </term>
+ <listitem><para>These functions set <code>failbit</code> on error now.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#130">130</link>:
+ <emphasis>Return type of container::erase(iterator) differs for associative containers</emphasis>
+ </term>
+ <listitem><para>Make member <code>erase</code> return iterator for <code>set</code>, <code>multiset</code>, <code>map</code>, <code>multimap</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#136">136</link>:
+ <emphasis>seekp, seekg setting wrong streams?</emphasis>
+ </term>
+ <listitem><para><code>seekp</code> should only set the output stream, and
+ <code>seekg</code> should only set the input stream.
+ </para></listitem></varlistentry>
+
+<!--<varlistentry><term><ulink url="../ext/lwg-defects.html#159">159</ulink>:
+ <emphasis>Strange use of underflow()</emphasis>
+ </term>
+ <listitem><para>In fstream.tcc, the basic_filebuf&lt;&gt;::showmanyc() function
+ should probably not be calling <code>underflow()</code>.
+ </para></listitem></varlistentry> -->
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#167">167</link>:
+ <emphasis>Improper use of traits_type::length()</emphasis>
+ </term>
+ <listitem><para><code>op&lt;&lt;</code> with a <code>const char*</code> was
+ calculating an incorrect number of characters to write.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#169">169</link>:
+ <emphasis>Bad efficiency of overflow() mandated</emphasis>
+ </term>
+ <listitem><para>Grow efficiently the internal array object.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#171">171</link>:
+ <emphasis>Strange seekpos() semantics due to joint position</emphasis>
+ </term>
+ <listitem><para>Quite complex to summarize...
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#181">181</link>:
+ <emphasis>make_pair() unintended behavior</emphasis>
+ </term>
+ <listitem><para>This function used to take its arguments as reference-to-const, now
+ it copies them (pass by value).
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#195">195</link>:
+ <emphasis>Should basic_istream::sentry's constructor ever set eofbit?</emphasis>
+ </term>
+ <listitem><para>Yes, it can, specifically if EOF is reached while skipping whitespace.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#211">211</link>:
+ <emphasis>operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</emphasis>
+ </term>
+ <listitem><para>If nothing is extracted into the string, <code>op&gt;&gt;</code> now
+ sets <code>failbit</code> (which can cause an exception, etc., etc.).
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#214">214</link>:
+ <emphasis>set::find() missing const overload</emphasis>
+ </term>
+ <listitem><para>Both <code>set</code> and <code>multiset</code> were missing
+ overloaded find, lower_bound, upper_bound, and equal_range functions
+ for const instances.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#231">231</link>:
+ <emphasis>Precision in iostream?</emphasis>
+ </term>
+ <listitem><para>For conversion from a floating-point type, <code>str.precision()</code>
+ is specified in the conversion specification.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#233">233</link>:
+ <emphasis>Insertion hints in associative containers</emphasis>
+ </term>
+ <listitem><para>Implement N1780, first check before then check after, insert as close
+ to hint as possible.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#235">235</link>:
+ <emphasis>No specification of default ctor for reverse_iterator</emphasis>
+ </term>
+ <listitem><para>The declaration of <code>reverse_iterator</code> lists a default constructor.
+ However, no specification is given what this constructor should do.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#241">241</link>:
+ <emphasis>Does unique_copy() require CopyConstructible and Assignable?</emphasis>
+ </term>
+ <listitem><para>Add a helper for forward_iterator/output_iterator, fix the existing
+ one for input_iterator/output_iterator to not rely on Assignability.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#243">243</link>:
+ <emphasis>get and getline when sentry reports failure</emphasis>
+ </term>
+ <listitem><para>Store a null character only if the character array has a non-zero size.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#251">251</link>:
+ <emphasis>basic_stringbuf missing allocator_type</emphasis>
+ </term>
+ <listitem><para>This nested typedef was originally not specified.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#253">253</link>:
+ <emphasis>valarray helper functions are almost entirely useless</emphasis>
+ </term>
+ <listitem><para>Make the copy constructor and copy-assignment operator declarations
+ public in gslice_array, indirect_array, mask_array, slice_array; provide
+ definitions.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#265">265</link>:
+ <emphasis>std::pair::pair() effects overly restrictive</emphasis>
+ </term>
+ <listitem><para>The default ctor would build its members from copies of temporaries;
+ now it simply uses their respective default ctors.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#266">266</link>:
+ <emphasis>bad_exception::~bad_exception() missing Effects clause</emphasis>
+ </term>
+ <listitem><para>The <code>bad_</code>* classes no longer have destructors (they
+ are trivial), since no description of them was ever given.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#271">271</link>:
+ <emphasis>basic_iostream missing typedefs</emphasis>
+ </term>
+ <listitem><para>The typedefs it inherits from its base classes can't be used, since
+ (for example) <code>basic_iostream&lt;T&gt;::traits_type</code> is ambiguous.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#275">275</link>:
+ <emphasis>Wrong type in num_get::get() overloads</emphasis>
+ </term>
+ <listitem><para>Similar to 118.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#280">280</link>:
+ <emphasis>Comparison of reverse_iterator to const reverse_iterator</emphasis>
+ </term>
+ <listitem><para>Add global functions with two template parameters.
+ (NB: not added for now a templated assignment operator)
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#292">292</link>:
+ <emphasis>Effects of a.copyfmt (a)</emphasis>
+ </term>
+ <listitem><para>If <code>(this == &amp;rhs)</code> do nothing.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#300">300</link>:
+ <emphasis>List::merge() specification incomplete</emphasis>
+ </term>
+ <listitem><para>If <code>(this == &amp;x)</code> do nothing.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#303">303</link>:
+ <emphasis>Bitset input operator underspecified</emphasis>
+ </term>
+ <listitem><para>Basically, compare the input character to
+ <code>is.widen(0)</code> and <code>is.widen(1)</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#305">305</link>:
+ <emphasis>Default behavior of codecvt&lt;wchar_t, char,
+ mbstate_t&gt;::length()</emphasis>
+ </term>
+ <listitem><para>Do not specify what <code>codecvt&lt;wchar_t, char,
+ mbstate_t&gt;::do_length</code> must return.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#328">328</link>:
+ <emphasis>Bad sprintf format modifier in
+ money_put&lt;&gt;::do_put()</emphasis>
+ </term>
+ <listitem><para>Change the format string to "%.0Lf".
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#365">365</link>:
+ <emphasis>Lack of const-qualification in clause 27</emphasis>
+ </term>
+ <listitem><para>Add const overloads of <code>is_open</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#387">387</link>:
+ <emphasis>std::complex over-encapsulated</emphasis>
+ </term>
+ <listitem><para>Add the <code>real(T)</code> and <code>imag(T)</code>
+ members; in C++11 mode, also adjust the existing
+ <code>real()</code> and <code>imag()</code> members and
+ free functions.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#389">389</link>:
+ <emphasis>Const overload of valarray::operator[] returns
+ by value</emphasis>
+ </term>
+ <listitem><para>Change it to return a <code>const T&amp;</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#396">396</link>:
+ <emphasis>what are characters zero and one</emphasis>
+ </term>
+ <listitem><para>Implement the proposed resolution.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#402">402</link>:
+ <emphasis>Wrong new expression in [some_]allocator::construct</emphasis>
+ </term>
+ <listitem><para>Replace "new" with "::new".
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#408">408</link>:
+ <emphasis>
+ Is vector&lt;reverse_iterator&lt;char*&gt; &gt; forbidden?
+ </emphasis>
+ </term>
+ <listitem><para>Tweak the debug-mode checks in _Safe_iterator.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#409">409</link>:
+ <emphasis>Closing an fstream should clear the error state</emphasis>
+ </term>
+ <listitem><para>Have <code>open</code> clear the error flags.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#431">431</link>:
+ <emphasis>Swapping containers with unequal allocators</emphasis>
+ </term>
+ <listitem><para>Implement Option 3, as per N1599.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#432">432</link>:
+ <emphasis>stringbuf::overflow() makes only one write position
+ available</emphasis>
+ </term>
+ <listitem><para>Implement the resolution, beyond DR 169.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#434">434</link>:
+ <emphasis>bitset::to_string() hard to use</emphasis>
+ </term>
+ <listitem><para>Add three overloads, taking fewer template arguments.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#438">438</link>:
+ <emphasis>Ambiguity in the "do the right thing" clause</emphasis>
+ </term>
+ <listitem><para>Implement the resolution, basically cast less.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#453">453</link>:
+ <emphasis>basic_stringbuf::seekoff need not always fail for an empty stream</emphasis>
+ </term>
+ <listitem><para>Don't fail if the next pointer is null and newoff is zero.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#455">455</link>:
+ <emphasis>cerr::tie() and wcerr::tie() are overspecified</emphasis>
+ </term>
+ <listitem><para>Initialize cerr tied to cout and wcerr tied to wcout.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#464">464</link>:
+ <emphasis>Suggestion for new member functions in standard containers</emphasis>
+ </term>
+ <listitem><para>Add <code>data()</code> to <code>std::vector</code> and
+ <code>at(const key_type&amp;)</code> to <code>std::map</code>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#508">508</link>:
+ <emphasis>Bad parameters for ranlux64_base_01</emphasis>
+ </term>
+ <listitem><para>Fix the parameters.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#512">512</link>:
+ <emphasis>Seeding subtract_with_carry_01 from a single unsigned long</emphasis>
+ </term>
+ <listitem><para>Construct a <code>linear_congruential</code> engine and seed with it.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#526">526</link>:
+ <emphasis>Is it undefined if a function in the standard changes in
+ parameters?</emphasis>
+ </term>
+ <listitem><para>Use &amp;value.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#538">538</link>:
+ <emphasis>241 again: Does unique_copy() require CopyConstructible
+ and Assignable?</emphasis>
+ </term>
+ <listitem><para>In case of input_iterator/output_iterator rely on Assignability of
+ input_iterator' value_type.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#539">539</link>:
+ <emphasis>partial_sum and adjacent_difference should mention
+ requirements</emphasis>
+ </term>
+ <listitem><para>We were almost doing the right thing, just use std::move
+ in adjacent_difference.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#541">541</link>:
+ <emphasis>shared_ptr template assignment and void</emphasis>
+ </term>
+ <listitem><para>Add an auto_ptr&lt;void&gt; specialization.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#543">543</link>:
+ <emphasis>valarray slice default constructor</emphasis>
+ </term>
+ <listitem><para>Follow the straightforward proposed resolution.
+ </para></listitem></varlistentry>
+
+ <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++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>:
+ <emphasis>string inserter not a formatted function</emphasis>
+ </term>
+ <listitem><para>Change it to be a formatted output function (i.e. catch exceptions).
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#596">596</link>:
+ <emphasis>27.8.1.3 Table 112 omits "a+" and "a+b" modes</emphasis>
+ </term>
+ <listitem><para>Add the missing modes to fopen_mode.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#630">630</link>:
+ <emphasis>arrays of valarray</emphasis>
+ </term>
+ <listitem><para>Implement the simple resolution.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#660">660</link>:
+ <emphasis>Missing bitwise operations</emphasis>
+ </term>
+ <listitem><para>Add the missing operations.
+ </para></listitem></varlistentry>
+
+ <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++11 mode add cbegin(size_type) and cend(size_type)
+ to the unordered containers.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#693">693</link>:
+ <emphasis>std::bitset::all() missing</emphasis>
+ </term>
+ <listitem><para>Add it, consistently with the discussion.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#695">695</link>:
+ <emphasis>ctype&lt;char&gt;::classic_table() not accessible</emphasis>
+ </term>
+ <listitem><para>Make the member functions table and classic_table public.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#696">696</link>:
+ <emphasis>istream::operator&gt;&gt;(int&amp;) broken</emphasis>
+ </term>
+ <listitem><para>Implement the straightforward resolution.
+ </para></listitem></varlistentry>
+
+ <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++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>:
+ <emphasis>Tuple indexing should be unsigned?</emphasis>
+ </term>
+ <listitem><para>Implement the int -&gt; size_t replacements.
+ </para></listitem></varlistentry>
+
+ <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++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++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>:
+ <emphasis>std::swap should be overloaded for array types</emphasis>
+ </term>
+ <listitem><para>Add the overload.
+ </para></listitem></varlistentry>
+
+ <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++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>:
+ <emphasis>to_string needs updating with zero and one</emphasis>
+ </term>
+ <listitem><para>Update / add the signatures.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#865">865</link>:
+ <emphasis>More algorithms that throw away information</emphasis>
+ </term>
+ <listitem><para>The traditional HP / SGI return type and value is blessed
+ by the resolution of the DR.
+ </para></listitem></varlistentry>
+ </variablelist>
+
+ </section>
+ </section>
+</chapter>
+
+
+<!-- Chapter 02 : Setup -->
+<chapter xml:id="manual.intro.setup" xreflabel="Setup"><info><title>Setup</title></info>
+ <?dbhtml filename="setup.html"?>
+
+
+ <para>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.
+ </para>
+
+ <para>The general outline of commands is something like:
+ </para>
+
+ <programlisting>
+ <emphasis>get gcc sources</emphasis>
+ <emphasis>extract into gccsrcdir</emphasis>
+ mkdir <emphasis>gccbuilddir</emphasis>
+ cd <emphasis>gccbuilddir</emphasis>
+ <emphasis>gccsrcdir</emphasis>/configure --prefix=<emphasis>destdir</emphasis> --other-opts...
+ make
+ make check
+ make install
+ </programlisting>
+
+ <para>
+ Each step is described in more detail in the following sections.
+ </para>
+
+ <!-- Section 01 : Prerequisites -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="prerequisites.xml">
+ </xi:include>
+
+ <!-- Section 02 : Configure -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="configure.xml">
+ </xi:include>
+
+ <!-- Section 03 : Make -->
+<section xml:id="manual.intro.setup.make" xreflabel="Make"><info><title>Make</title></info>
+ <?dbhtml filename="make.html"?>
+
+ <para>If you have never done this before, you should read the basic
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/">GCC Installation
+ Instructions</link> first. Read <emphasis>all of them</emphasis>.
+ <emphasis>Twice.</emphasis>
+ </para>
+
+<para>Then type: <command>make</command>, and congratulations, you've
+started to build.
+</para>
+
+</section>
+
+</chapter>
+
+<!-- Chapter 03 : Using -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="using.xml">
+</xi:include>
+
+</part>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/io.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/io.xml
new file mode 100644
index 000000000..480b697bd
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/io.xml
@@ -0,0 +1,645 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.io" xreflabel="Input and Output">
+<?dbhtml filename="io.html"?>
+
+<info><title>
+ Input and Output
+ <indexterm><primary>Input and Output</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<!-- Sect1 01 : Iostream Objects -->
+<section xml:id="std.io.objects" xreflabel="IO Objects"><info><title>Iostream Objects</title></info>
+<?dbhtml filename="iostream_objects.html"?>
+
+
+ <para>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 <emphasis>penalize
+ your runtime as well.</emphasis> Here are some tips on which header to use
+ for which situations, starting with the simplest.
+ </para>
+ <para><emphasis>&lt;iosfwd&gt;</emphasis> should be included whenever you simply
+ need the <emphasis>name</emphasis> of an I/O-related class, such as
+ "ofstream" or "basic_streambuf". Like the name
+ implies, these are forward declarations. (A word to all you fellow
+ old school programmers: trying to forward declare classes like
+ "class istream;" won't work. Look in the iosfwd header if
+ you'd like to know why.) For example,
+ </para>
+ <programlisting>
+ #include &lt;iosfwd&gt;
+
+ class MyClass
+ {
+ ....
+ std::ifstream&amp; input_file;
+ };
+
+ extern std::ostream&amp; operator&lt;&lt; (std::ostream&amp;, MyClass&amp;);
+ </programlisting>
+ <para><emphasis>&lt;ios&gt;</emphasis> declares the base classes for the entire
+ I/O stream hierarchy, std::ios_base and std::basic_ios&lt;charT&gt;, the
+ counting types std::streamoff and std::streamsize, the file
+ positioning type std::fpos, and the various manipulators like
+ std::hex, std::fixed, std::noshowbase, and so forth.
+ </para>
+ <para>The ios_base class is what holds the format flags, the state flags,
+ and the functions which change them (setf(), width(), precision(),
+ etc). You can also store extra data and register callback functions
+ through ios_base, but that has been historically underused. Anything
+ which doesn't depend on the type of characters stored is consolidated
+ here.
+ </para>
+ <para>The template class basic_ios is the highest template class in the
+ hierarchy; it is the first one depending on the character type, and
+ holds all general state associated with that type: the pointer to the
+ polymorphic stream buffer, the facet information, etc.
+ </para>
+ <para><emphasis>&lt;streambuf&gt;</emphasis> declares the template class
+ basic_streambuf, and two standard instantiations, streambuf and
+ wstreambuf. If you need to work with the vastly useful and capable
+ stream buffer classes, e.g., to create a new form of storage
+ transport, this header is the one to include.
+ </para>
+ <para><emphasis>&lt;istream&gt;</emphasis>/<emphasis>&lt;ostream&gt;</emphasis> are
+ the headers to include when you are using the &gt;&gt;/&lt;&lt;
+ interface, or any of the other abstract stream formatting functions.
+ For example,
+ </para>
+ <programlisting>
+ #include &lt;istream&gt;
+
+ std::ostream&amp; operator&lt;&lt; (std::ostream&amp; os, MyClass&amp; c)
+ {
+ return os &lt;&lt; c.data1() &lt;&lt; c.data2();
+ }
+ </programlisting>
+ <para>The std::istream and std::ostream classes are the abstract parents of
+ the various concrete implementations. If you are only using the
+ interfaces, then you only need to use the appropriate interface header.
+ </para>
+ <para><emphasis>&lt;iomanip&gt;</emphasis> provides "extractors and inserters
+ that alter information maintained by class ios_base and its derived
+ classes," such as std::setprecision and std::setw. If you need
+ to write expressions like <code>os &lt;&lt; setw(3);</code> or
+ <code>is &gt;&gt; setbase(8);</code>, you must include &lt;iomanip&gt;.
+ </para>
+ <para><emphasis>&lt;sstream&gt;</emphasis>/<emphasis>&lt;fstream&gt;</emphasis>
+ declare the six stringstream and fstream classes. As they are the
+ standard concrete descendants of istream and ostream, you will already
+ know about them.
+ </para>
+ <para>Finally, <emphasis>&lt;iostream&gt;</emphasis> provides the eight standard
+ global objects (cin, cout, etc). To do this correctly, this header
+ also provides the contents of the &lt;istream&gt; and &lt;ostream&gt;
+ headers, but nothing else. The contents of this header look like
+ </para>
+ <programlisting>
+ #include &lt;ostream&gt;
+ #include &lt;istream&gt;
+
+ namespace std
+ {
+ extern istream cin;
+ extern ostream cout;
+ ....
+
+ // this is explained below
+ <emphasis>static ios_base::Init __foo;</emphasis> // not its real name
+ }
+ </programlisting>
+ <para>Now, the runtime penalty mentioned previously: the global objects
+ must be initialized before any of your own code uses them; this is
+ guaranteed by the standard. Like any other global object, they must
+ be initialized once and only once. This is typically done with a
+ construct like the one above, and the nested class ios_base::Init is
+ specified in the standard for just this reason.
+ </para>
+ <para>How does it work? Because the header is included before any of your
+ code, the <emphasis>__foo</emphasis> object is constructed before any of
+ your objects. (Global objects are built in the order in which they
+ are declared, and destroyed in reverse order.) The first time the
+ constructor runs, the eight stream objects are set up.
+ </para>
+ <para>The <code>static</code> keyword means that each object file compiled
+ from a source file containing &lt;iostream&gt; will have its own
+ private copy of <emphasis>__foo</emphasis>. There is no specified order
+ of construction across object files (it's one of those pesky NP
+ problems that make life so interesting), so one copy in each object
+ file means that the stream objects are guaranteed to be set up before
+ any of your code which uses them could run, thereby meeting the
+ requirements of the standard.
+ </para>
+ <para>The penalty, of course, is that after the first copy of
+ <emphasis>__foo</emphasis> is constructed, all the others are just wasted
+ processor time. The time spent is merely for an increment-and-test
+ inside a function call, but over several dozen or hundreds of object
+ files, that time can add up. (It's not in a tight loop, either.)
+ </para>
+ <para>The lesson? Only include &lt;iostream&gt; when you need to use one of
+ 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.
+ </para>
+
+</section>
+
+<!-- Sect1 02 : Stream Buffers -->
+<section xml:id="std.io.streambufs" xreflabel="Stream Buffers"><info><title>Stream Buffers</title></info>
+<?dbhtml filename="streambufs.html"?>
+
+
+ <section xml:id="io.streambuf.derived" xreflabel="Derived streambuf Classes"><info><title>Derived streambuf Classes</title></info>
+
+ <para>
+ </para>
+
+ <para>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:
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.angelikalanger.com/iostreams.html">Standard C++
+ IOStreams and Locales</link> by Langer and Kreft, ISBN 0-201-18395-1, and
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.josuttis.com/libbook/">The C++ Standard Library</link>
+ 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.
+ </para>
+ <para>Here is a simple example, io/outbuf1, from the Josuttis text. It
+ transforms everything sent through it to uppercase. This version
+ assumes many things about the nature of the character type being
+ used (for more information, read the books or the newsgroups):
+ </para>
+ <programlisting>
+ #include &lt;iostream&gt;
+ #include &lt;streambuf&gt;
+ #include &lt;locale&gt;
+ #include &lt;cstdio&gt;
+
+ class outbuf : public std::streambuf
+ {
+ protected:
+ /* central output function
+ * - print characters in uppercase mode
+ */
+ virtual int_type overflow (int_type c) {
+ if (c != EOF) {
+ // convert lowercase to uppercase
+ c = std::toupper(static_cast&lt;char&gt;(c),getloc());
+
+ // and write the character to the standard output
+ if (putchar(c) == EOF) {
+ return EOF;
+ }
+ }
+ return c;
+ }
+ };
+
+ int main()
+ {
+ // create special output buffer
+ outbuf ob;
+ // initialize output stream with that output buffer
+ std::ostream out(&amp;ob);
+
+ out &lt;&lt; "31 hexadecimal: "
+ &lt;&lt; std::hex &lt;&lt; 31 &lt;&lt; std::endl;
+ return 0;
+ }
+ </programlisting>
+ <para>Try it yourself! More examples can be found in 3.1.x code, in
+ <code>include/ext/*_filebuf.h</code>, and in this article by James Kanze:
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://kanze.james.neuf.fr/articles/fltrsbf1.html">Filtering
+ Streambufs</link>.
+ </para>
+
+ </section>
+
+ <section xml:id="io.streambuf.buffering" xreflabel="Buffering"><info><title>Buffering</title></info>
+
+ <para>First, are you sure that you understand buffering? Particularly
+ the fact that C++ may not, in fact, have anything to do with it?
+ </para>
+ <para>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
+ odd.) Many people think that writing a newline to an output
+ stream automatically flushes the output buffer. This is true only
+ when the output stream is, in fact, a terminal and not a file
+ or some other device -- and <emphasis>that</emphasis> may not even be true
+ since C++ says nothing about files nor terminals. All of that is
+ system-dependent. (The "newline-buffer-flushing only occurring
+ on terminals" thing is mostly true on Unix systems, though.)
+ </para>
+ <para>Some people also believe that sending <code>endl</code> down an
+ output stream only writes a newline. This is incorrect; after a
+ newline is written, the buffer is also flushed. Perhaps this
+ is the effect you want when writing to a screen -- get the text
+ out as soon as possible, etc -- but the buffering is largely
+ wasted when doing this to a file:
+ </para>
+ <programlisting>
+ output &lt;&lt; "a line of text" &lt;&lt; endl;
+ output &lt;&lt; some_data_variable &lt;&lt; endl;
+ output &lt;&lt; "another line of text" &lt;&lt; endl; </programlisting>
+ <para>The proper thing to do in this case to just write the data out
+ and let the libraries and the system worry about the buffering.
+ If you need a newline, just write a newline:
+ </para>
+ <programlisting>
+ output &lt;&lt; "a line of text\n"
+ &lt;&lt; some_data_variable &lt;&lt; '\n'
+ &lt;&lt; "another line of text\n"; </programlisting>
+ <para>I have also joined the output statements into a single statement.
+ You could make the code prettier by moving the single newline to
+ the start of the quoted text on the last line, for example.
+ </para>
+ <para>If you do need to flush the buffer above, you can send an
+ <code>endl</code> if you also need a newline, or just flush the buffer
+ yourself:
+ </para>
+ <programlisting>
+ output &lt;&lt; ...... &lt;&lt; flush; // can use std::flush manipulator
+ output.flush(); // or call a member fn </programlisting>
+ <para>On the other hand, there are times when writing to a file should
+ be like writing to standard error; no buffering should be done
+ because the data needs to appear quickly (a prime example is a
+ log file for security-related information). The way to do this is
+ just to turn off the buffering <emphasis>before any I/O operations at
+ all</emphasis> have been done (note that opening counts as an I/O operation):
+ </para>
+ <programlisting>
+ std::ofstream os;
+ std::ifstream is;
+ int i;
+
+ os.rdbuf()-&gt;pubsetbuf(0,0);
+ is.rdbuf()-&gt;pubsetbuf(0,0);
+
+ os.open("/foo/bar/baz");
+ is.open("/qux/quux/quuux");
+ ...
+ os &lt;&lt; "this data is written immediately\n";
+ is &gt;&gt; i; // and this will probably cause a disk read </programlisting>
+ <para>Since all aspects of buffering are handled by a streambuf-derived
+ member, it is necessary to get at that member with <code>rdbuf()</code>.
+ Then the public version of <code>setbuf</code> can be called. The
+ arguments are the same as those for the Standard C I/O Library
+ function (a buffer area followed by its size).
+ </para>
+ <para>A great deal of this is implementation-dependent. For example,
+ <code>streambuf</code> does not specify any actions for its own
+ <code>setbuf()</code>-ish functions; the classes derived from
+ <code>streambuf</code> each define behavior that "makes
+ sense" for that class: an argument of (0,0) turns off buffering
+ for <code>filebuf</code> but does nothing at all for its siblings
+ <code>stringbuf</code> and <code>strstreambuf</code>, and specifying
+ anything other than (0,0) has varying effects.
+ User-defined classes derived from <code>streambuf</code> can
+ do whatever they want. (For <code>filebuf</code> and arguments for
+ <code>(p,s)</code> other than zeros, libstdc++ does what you'd expect:
+ the first <code>s</code> bytes of <code>p</code> are used as a buffer,
+ which you must allocate and deallocate.)
+ </para>
+ <para>A last reminder: there are usually more buffers involved than
+ 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.
+ </para>
+
+ </section>
+</section>
+
+<!-- Sect1 03 : Memory-based Streams -->
+<section xml:id="std.io.memstreams" xreflabel="Memory Streams"><info><title>Memory Based Streams</title></info>
+<?dbhtml filename="stringstreams.html"?>
+
+ <section xml:id="std.io.memstreams.compat" xreflabel="Compatibility strstream"><info><title>Compatibility With strstream</title></info>
+
+ <para>
+ </para>
+ <para>Stringstreams (defined in the header <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
+ section for Sect1 21 (Strings),
+ <link linkend="strings.string.Cstring"> describing how to
+ format strings</link>.
+ </para>
+ <para>The quick definition is: they are siblings of ifstream and ofstream,
+ and they do for <code>std::string</code> what their siblings do for
+ files. All that work you put into writing <code>&lt;&lt;</code> and
+ <code>&gt;&gt;</code> functions for your classes now pays off
+ <emphasis>again!</emphasis> Need to format a string before passing the string
+ to a function? Send your stuff via <code>&lt;&lt;</code> to an
+ ostringstream. You've read a string as input and need to parse it?
+ Initialize an istringstream with that string, and then pull pieces
+ out of it with <code>&gt;&gt;</code>. Have a stringstream and need to
+ get a copy of the string inside? Just call the <code>str()</code>
+ member function.
+ </para>
+ <para>This only works if you've written your
+ <code>&lt;&lt;</code>/<code>&gt;&gt;</code> functions correctly, though,
+ and correctly means that they take istreams and ostreams as
+ parameters, not i<emphasis>f</emphasis>streams and o<emphasis>f</emphasis>streams. If they
+ take the latter, then your I/O operators will work fine with
+ file streams, but with nothing else -- including stringstreams.
+ </para>
+ <para>If you are a user of the strstream classes, you need to update
+ your code. You don't have to explicitly append <code>ends</code> to
+ terminate the C-style character array, you don't have to mess with
+ "freezing" functions, and you don't have to manage the
+ 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.
+ </para>
+
+
+ </section>
+</section>
+
+<!-- Sect1 04 : File-based Streams -->
+<section xml:id="std.io.filestreams" xreflabel="File Streams"><info><title>File Based Streams</title></info>
+<?dbhtml filename="fstreams.html"?>
+
+
+ <section xml:id="std.io.filestreams.copying_a_file" xreflabel="Copying a File"><info><title>Copying a File</title></info>
+
+ <para>
+ </para>
+
+ <para>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):
+ </para>
+ <programlisting>
+ #include &lt;fstream&gt;
+
+ std::ifstream IN ("input_file");
+ std::ofstream OUT ("output_file"); </programlisting>
+ <para>Here's the easiest way to get it completely wrong:
+ </para>
+ <programlisting>
+ OUT &lt;&lt; IN;</programlisting>
+ <para>For those of you who don't already know why this doesn't work
+ (probably from having done it before), I invite you to quickly
+ create a simple text file called "input_file" containing
+ the sentence
+ </para>
+ <programlisting>
+ The quick brown fox jumped over the lazy dog.</programlisting>
+ <para>surrounded by blank lines. Code it up and try it. The contents
+ of "output_file" may surprise you.
+ </para>
+ <para>Seriously, go do it. Get surprised, then come back. It's worth it.
+ </para>
+ <para>The thing to remember is that the <code>basic_[io]stream</code> classes
+ handle formatting, nothing else. In chaptericular, they break up on
+ whitespace. The actual reading, writing, and storing of data is
+ handled by the <code>basic_streambuf</code> family. Fortunately, the
+ <code>operator&lt;&lt;</code> is overloaded to take an ostream and
+ a pointer-to-streambuf, in order to help with just this kind of
+ "dump the data verbatim" situation.
+ </para>
+ <para>Why a <emphasis>pointer</emphasis> to streambuf and not just a streambuf? Well,
+ the [io]streams hold pointers (or references, depending on the
+ implementation) to their buffers, not the actual
+ buffers. This allows polymorphic behavior on the chapter of the buffers
+ as well as the streams themselves. The pointer is easily retrieved
+ using the <code>rdbuf()</code> member function. Therefore, the easiest
+ way to copy the file is:
+ </para>
+ <programlisting>
+ OUT &lt;&lt; IN.rdbuf();</programlisting>
+ <para>So what <emphasis>was</emphasis> happening with OUT&lt;&lt;IN? Undefined
+ behavior, since that chaptericular &lt;&lt; isn't defined by the Standard.
+ I have seen instances where it is implemented, but the character
+ extraction process removes all the whitespace, leaving you with no
+ blank lines and only "Thequickbrownfox...". With
+ libraries that do not define that operator, IN (or one of IN's
+ member pointers) sometimes gets converted to a void*, and the output
+ file then contains a perfect text representation of a hexadecimal
+ address (quite a big surprise). Others don't compile at all.
+ </para>
+ <para>Also note that none of this is specific to o<emphasis>*f*</emphasis>streams.
+ The operators shown above are all defined in the parent
+ basic_ostream class and are therefore available with all possible
+ descendants.
+ </para>
+
+ </section>
+
+ <section xml:id="std.io.filestreams.binary" xreflabel="Binary Input and Output"><info><title>Binary Input and Output</title></info>
+
+ <para>
+ </para>
+ <para>The first and most important thing to remember about binary I/O is
+ that opening a file with <code>ios::binary</code> is not, repeat
+ <emphasis>not</emphasis>, the only thing you have to do. It is not a silver
+ bullet, and will not allow you to use the <code>&lt;&lt;/&gt;&gt;</code>
+ operators of the normal fstreams to do binary I/O.
+ </para>
+ <para>Sorry. Them's the breaks.
+ </para>
+ <para>This isn't going to try and be a complete tutorial on reading and
+ writing binary files (because "binary"
+ covers a lot of ground), but we will try and clear
+ up a couple of misconceptions and common errors.
+ </para>
+ <para>First, <code>ios::binary</code> has exactly one defined effect, no more
+ and no less. Normal text mode has to be concerned with the newline
+ characters, and the runtime system will translate between (for
+ example) '\n' and the appropriate end-of-line sequence (LF on Unix,
+ CRLF on DOS, CR on Macintosh, etc). (There are other things that
+ normal mode does, but that's the most obvious.) Opening a file in
+ binary mode disables this conversion, so reading a CRLF sequence
+ under Windows won't accidentally get mapped to a '\n' character, etc.
+ Binary mode is not supposed to suddenly give you a bitstream, and
+ if it is doing so in your program then you've discovered a bug in
+ your vendor's compiler (or some other chapter of the C++ implementation,
+ possibly the runtime system).
+ </para>
+ <para>Second, using <code>&lt;&lt;</code> to write and <code>&gt;&gt;</code> to
+ read isn't going to work with the standard file stream classes, even
+ if you use <code>skipws</code> during reading. Why not? Because
+ ifstream and ofstream exist for the purpose of <emphasis>formatting</emphasis>,
+ not reading and writing. Their job is to interpret the data into
+ text characters, and that's exactly what you don't want to happen
+ during binary I/O.
+ </para>
+ <para>Third, using the <code>get()</code> and <code>put()/write()</code> member
+ functions still aren't guaranteed to help you. These are
+ "unformatted" I/O functions, but still character-based.
+ (This may or may not be what you want, see below.)
+ </para>
+ <para>Notice how all the problems here are due to the inappropriate use
+ of <emphasis>formatting</emphasis> functions and classes to perform something
+ which <emphasis>requires</emphasis> that formatting not be done? There are a
+ seemingly infinite number of solutions, and a few are listed here:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para><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.</quote>
+ </para>
+ <para>
+ This is a Bad Thing, because while
+ the compiler would probably be just fine with it, other humans
+ are going to be confused. The overloaded bitshift operators
+ have a well-defined meaning (formatting), and this breaks it.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <quote>Build the file structure in memory, then
+ <code>mmap()</code> the file and copy the
+ structure.
+ </quote>
+ </para>
+ <para>
+ Well, this is easy to make work, and easy to break, and is
+ pretty equivalent to using <code>::read()</code> and
+ <code>::write()</code> directly, and makes no use of the
+ iostream library at all...
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <quote>Use streambufs, that's what they're there for.</quote>
+ </para>
+ <para>
+ While not trivial for the beginner, this is the best of all
+ solutions. The streambuf/filebuf layer is the layer that is
+ responsible for actual I/O. If you want to use the C++
+ library for binary I/O, this is where you start.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>How to go about using streambufs is a bit beyond the scope of this
+ document (at least for now), but while streambufs go a long way,
+ they still leave a couple of things up to you, the programmer.
+ As an example, byte ordering is completely between you and the
+ operating system, and you have to handle it yourself.
+ </para>
+ <para>Deriving a streambuf or filebuf
+ class from the standard ones, one that is specific to your data
+ types (or an abstraction thereof) is probably a good idea, and
+ lots of examples exist in journals and on Usenet. Using the
+ standard filebufs directly (either by declaring your own or by
+ using the pointer returned from an fstream's <code>rdbuf()</code>)
+ is certainly feasible as well.
+ </para>
+ <para>One area that causes problems is trying to do bit-by-bit operations
+ with filebufs. C++ is no different from C in this respect: I/O
+ must be done at the byte level. If you're trying to read or write
+ a few bits at a time, you're going about it the wrong way. You
+ must read/write an integral number of bytes and then process the
+ bytes. (For example, the streambuf functions take and return
+ variables of type <code>int_type</code>.)
+ </para>
+ <para>Another area of problems is opening text files in binary mode.
+ Generally, binary mode is intended for binary files, and opening
+ text files in binary mode means that you now have to deal with all of
+ those end-of-line and end-of-file problems that we mentioned before.
+ </para>
+ <para>
+ An instructive thread from comp.lang.c++.moderated delved off into
+ this topic starting more or less at
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d">this</link>
+ 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.
+ </para>
+ <para>Briefly, the problems of byte ordering and type sizes mean that
+ the unformatted functions like <code>ostream::put()</code> and
+ <code>istream::get()</code> cannot safely be used to communicate
+ 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.
+ </para>
+ </section>
+
+</section>
+
+<!-- Sect1 03 : Interacting with C -->
+<section xml:id="std.io.c" xreflabel="Interacting with C"><info><title>Interacting with C</title></info>
+<?dbhtml filename="io_and_c.html"?>
+
+
+
+ <section xml:id="std.io.c.FILE" xreflabel="Using FILE* and file descriptors"><info><title>Using FILE* and file descriptors</title></info>
+
+ <para>
+ See the <link linkend="manual.ext.io">extensions</link> for using
+ <type>FILE</type> and <type>file descriptors</type> with
+ <classname>ofstream</classname> and
+ <classname>ifstream</classname>.
+ </para>
+ </section>
+
+ <section xml:id="std.io.c.sync" xreflabel="Performance Issues"><info><title>Performance</title></info>
+
+ <para>
+ Pathetic Performance? Ditch C.
+ </para>
+ <para>It sounds like a flame on C, but it isn't. Really. Calm down.
+ I'm just saying it to get your attention.
+ </para>
+ <para>Because the C++ library includes the C library, both C-style and
+ C++-style I/O have to work at the same time. For example:
+ </para>
+ <programlisting>
+ #include &lt;iostream&gt;
+ #include &lt;cstdio&gt;
+
+ std::cout &lt;&lt; "Hel";
+ std::printf ("lo, worl");
+ std::cout &lt;&lt; "d!\n";
+ </programlisting>
+ <para>This must do what you think it does.
+ </para>
+ <para>Alert members of the audience will immediately notice that buffering
+ is going to make a hash of the output unless special steps are taken.
+ </para>
+ <para>The special steps taken by libstdc++, at least for version 3.0,
+ involve doing very little buffering for the standard streams, leaving
+ most of the buffering to the underlying C library. (This kind of
+ thing is tricky to get right.)
+ The upside is that correctness is ensured. The downside is that
+ writing through <code>cout</code> can quite easily lead to awful
+ performance when the C++ I/O library is layered on top of the C I/O
+ library (as it is for 3.0 by default). Some patches have been applied
+ which improve the situation for 3.1.
+ </para>
+ <para>However, the C and C++ standard streams only need to be kept in sync
+ when both libraries' facilities are in use. If your program only uses
+ C++ I/O, then there's no need to sync with the C streams. The right
+ thing to do in this case is to call
+ </para>
+ <programlisting>
+ #include <emphasis>any of the I/O headers such as ios, iostream, etc</emphasis>
+
+ std::ios::sync_with_stdio(false);
+ </programlisting>
+ <para>You must do this before performing any I/O via the C++ stream objects.
+ Once you call this, the C++ streams will operate independently of the
+ (unused) C streams. For GCC 3.x, this means that <code>cout</code> and
+ company will become fully buffered on their own.
+ </para>
+ <para>Note, by the way, that the synchronization requirement only applies to
+ the standard streams (<code>cin</code>, <code>cout</code>,
+ <code>cerr</code>,
+ <code>clog</code>, and their wide-character counterchapters). File stream
+ objects that you declare yourself have no such requirement and are fully
+ buffered.
+ </para>
+
+
+ </section>
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/iterators.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/iterators.xml
new file mode 100644
index 000000000..aab26b92e
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/iterators.xml
@@ -0,0 +1,181 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.iterators" xreflabel="Iterators">
+<?dbhtml filename="iterators.html"?>
+
+<info><title>
+ Iterators
+ <indexterm><primary>Iterators</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<!-- Sect1 01 : Predefined -->
+<section xml:id="std.iterators.predefined" xreflabel="Predefined"><info><title>Predefined</title></info>
+
+
+ <section xml:id="iterators.predefined.vs_pointers" xreflabel="Versus Pointers"><info><title>Iterators vs. Pointers</title></info>
+
+ <para>
+ The following
+FAQ <link linkend="faq.iterator_as_pod">entry</link> points out that
+iterators are not implemented as pointers. They are a generalization
+of pointers, but they are implemented in libstdc++ as separate
+classes.
+ </para>
+ <para>
+ Keeping that simple fact in mind as you design your code will
+ prevent a whole lot of difficult-to-understand bugs.
+ </para>
+ <para>
+ You can think of it the other way 'round, even. Since iterators
+ are a generalization, that means
+ 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 section of the Standard will work just as well on plain
+ arrays and their pointers.
+ </para>
+ <para>
+ That doesn't mean that when you pass in a pointer, it gets
+ wrapped into some special delegating iterator-to-pointer class
+ with a layer of overhead. (If you think that's the case
+ anywhere, you don't understand templates to begin with...) Oh,
+ no; if you pass in a pointer, then the compiler will instantiate
+ that template using T* as a type, and good old high-speed
+ pointer arithmetic as its operations, so the resulting code will
+ be doing exactly the same things as it would be doing if you had
+ hand-coded it yourself (for the 273rd time).
+ </para>
+ <para>
+ How much overhead <emphasis>is</emphasis> there when using an
+ iterator class? Very little. Most of the layering classes
+ contain nothing but typedefs, and typedefs are
+ "meta-information" that simply tell the compiler some
+ nicknames; they don't create code. That information gets passed
+ 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.)
+ </para>
+
+
+ </section>
+
+ <section xml:id="iterators.predefined.end" xreflabel="end() Is One Past the End"><info><title>One Past the End</title></info>
+
+
+ <para>This starts off sounding complicated, but is actually very easy,
+ especially towards the end. Trust me.
+ </para>
+ <para>Beginners usually have a little trouble understand the whole
+ 'past-the-end' thing, until they remember their early algebra classes
+ (see, they <emphasis>told</emphasis> you that stuff would come in handy!) and
+ the concept of half-open ranges.
+ </para>
+ <para>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:
+ </para>
+ <orderedlist inheritnum="ignore" continuation="restarts">
+ <listitem>
+ <para>You can point anywhere in the array, <emphasis>or to the first element
+ past the end of the array</emphasis>. 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
+ such pointers safely.
+ </para>
+ </listitem>
+ <listitem>
+ <para>You can only dereference a pointer that points into an array.
+ If your array pointer points outside the array -- even to just
+ one past the end -- and you dereference it, Bad Things happen.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Strictly speaking, simply pointing anywhere else invokes
+ undefined behavior. Most programs won't puke until such a
+ pointer is actually dereferenced, but the standards leave that
+ up to the platform.
+ </para>
+ </listitem>
+ </orderedlist>
+ <para>The reason this past-the-end addressing was allowed is to make it
+ easy to write a loop to go over an entire array, e.g.,
+ while (*d++ = *s++);.
+ </para>
+ <para>So, when you think of two pointers delimiting an array, don't think
+ of them as indexing 0 through n-1. Think of them as <emphasis>boundary
+ markers</emphasis>:
+ </para>
+ <programlisting>
+
+ beginning end
+ | |
+ | | This is bad. Always having to
+ | | remember to add or subtract one.
+ | | Off-by-one bugs very common here.
+ V V
+ array of N elements
+ |---|---|--...--|---|---|
+ | 0 | 1 | ... |N-2|N-1|
+ |---|---|--...--|---|---|
+
+ ^ ^
+ | |
+ | | This is good. This is safe. This
+ | | is guaranteed to work. Just don't
+ | | dereference 'end'.
+ beginning end
+
+ </programlisting>
+ <para>See? Everything between the boundary markers is chapter of the array.
+ Simple.
+ </para>
+ <para>Now think back to your junior-high school algebra course, when you
+ were learning how to draw graphs. Remember that a graph terminating
+ with a solid dot meant, "Everything up through this point,"
+ and a graph terminating with an open dot meant, "Everything up
+ to, but not including, this point," respectively called closed
+ and open ranges? Remember how closed ranges were written with
+ brackets, <emphasis>[a,b]</emphasis>, and open ranges were written with parentheses,
+ <emphasis>(a,b)</emphasis>?
+ </para>
+ <para>The boundary markers for arrays describe a <emphasis>half-open range</emphasis>,
+ starting with (and including) the first element, and ending with (but
+ not including) the last element: <emphasis>[beginning,end)</emphasis>. See, I
+ told you it would be simple in the end.
+ </para>
+ <para>Iterators, and everything working with iterators, follows this same
+ time-honored tradition. A container's <code>begin()</code> method returns
+ an iterator referring to the first element, and its <code>end()</code>
+ method returns a past-the-end iterator, which is guaranteed to be
+ unique and comparable against any other iterator pointing into the
+ middle of the container.
+ </para>
+ <para>Container constructors, container methods, and algorithms, all take
+ pairs of iterators describing a range of values on which to operate.
+ All of these ranges are half-open ranges, so you pass the beginning
+ iterator as the starting parameter, and the one-past-the-end iterator
+ as the finishing parameter.
+ </para>
+ <para>This generalizes very well. You can operate on sub-ranges quite
+ easily this way; functions accepting a <emphasis>[first,last)</emphasis> range
+ don't know or care whether they are the boundaries of an entire {array,
+ sequence, container, whatever}, or whether they only enclose a few
+ elements from the center. This approach also makes zero-length
+ sequences very simple to recognize: if the two endpoints compare
+ equal, then the {array, sequence, container, whatever} is empty.
+ </para>
+ <para>Just don't dereference <code>end()</code>.
+ </para>
+
+ </section>
+</section>
+
+<!-- Sect1 02 : Stream -->
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/locale.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/locale.xml
new file mode 100644
index 000000000..8a7809506
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/locale.xml
@@ -0,0 +1,615 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.localization.locales.locale" xreflabel="Locale">
+
+<info><title>locale</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>locale</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+Describes the basic locale object, including nested
+classes id, facet, and the reference-counted implementation object,
+class _Impl.
+</para>
+
+<section xml:id="locales.locale.req"><info><title>Requirements</title></info>
+
+
+<para>
+Class locale is non-templatized and has two distinct types nested
+inside of it:
+</para>
+
+<blockquote>
+<para>
+<emphasis>
+class facet
+22.1.1.1.2 Class locale::facet
+</emphasis>
+</para>
+</blockquote>
+
+<para>
+Facets actually implement locale functionality. For instance, a facet
+called numpunct is the data object that can be used to query for the
+thousands separator in the locale.
+</para>
+
+<para>
+Literally, a facet is strictly defined:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ Containing the following public data member:
+ </para>
+ <para>
+ <code>static locale::id id;</code>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Derived from another facet:
+ </para>
+ <para>
+ <code>class gnu_codecvt: public std::ctype&lt;user-defined-type&gt;</code>
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+Of interest in this class are the memory management options explicitly
+specified as an argument to facet's constructor. Each constructor of a
+facet class takes a std::size_t __refs argument: if __refs == 0, the
+facet is deleted when the locale containing it is destroyed. If __refs
+== 1, the facet is not destroyed, even when it is no longer
+referenced.
+</para>
+
+<blockquote>
+<para>
+<emphasis>
+class id
+22.1.1.1.3 - Class locale::id
+</emphasis>
+</para>
+</blockquote>
+
+<para>
+Provides an index for looking up specific facets.
+</para>
+</section>
+
+<section xml:id="locales.locale.design"><info><title>Design</title></info>
+
+
+<para>
+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.)
+</para>
+
+<para>
+Because C and earlier versions of POSIX fall down so completely,
+portability is an issue.
+</para>
+
+</section>
+
+<section xml:id="locales.locale.impl"><info><title>Implementation</title></info>
+
+
+ <section xml:id="locale.impl.c"><info><title>Interacting with "C" locales</title></info>
+
+
+<itemizedlist>
+ <listitem>
+ <para>
+ <code>`locale -a`</code> displays available locales.
+ </para>
+<blockquote>
+<programlisting>
+af_ZA
+ar_AE
+ar_AE.utf8
+ar_BH
+ar_BH.utf8
+ar_DZ
+ar_DZ.utf8
+ar_EG
+ar_EG.utf8
+ar_IN
+ar_IQ
+ar_IQ.utf8
+ar_JO
+ar_JO.utf8
+ar_KW
+ar_KW.utf8
+ar_LB
+ar_LB.utf8
+ar_LY
+ar_LY.utf8
+ar_MA
+ar_MA.utf8
+ar_OM
+ar_OM.utf8
+ar_QA
+ar_QA.utf8
+ar_SA
+ar_SA.utf8
+ar_SD
+ar_SD.utf8
+ar_SY
+ar_SY.utf8
+ar_TN
+ar_TN.utf8
+ar_YE
+ar_YE.utf8
+be_BY
+be_BY.utf8
+bg_BG
+bg_BG.utf8
+br_FR
+bs_BA
+C
+ca_ES
+ca_ES@euro
+ca_ES.utf8
+ca_ES.utf8@euro
+cs_CZ
+cs_CZ.utf8
+cy_GB
+da_DK
+da_DK.iso885915
+da_DK.utf8
+de_AT
+de_AT@euro
+de_AT.utf8
+de_AT.utf8@euro
+de_BE
+de_BE@euro
+de_BE.utf8
+de_BE.utf8@euro
+de_CH
+de_CH.utf8
+de_DE
+de_DE@euro
+de_DE.utf8
+de_DE.utf8@euro
+de_LU
+de_LU@euro
+de_LU.utf8
+de_LU.utf8@euro
+el_GR
+el_GR.utf8
+en_AU
+en_AU.utf8
+en_BW
+en_BW.utf8
+en_CA
+en_CA.utf8
+en_DK
+en_DK.utf8
+en_GB
+en_GB.iso885915
+en_GB.utf8
+en_HK
+en_HK.utf8
+en_IE
+en_IE@euro
+en_IE.utf8
+en_IE.utf8@euro
+en_IN
+en_NZ
+en_NZ.utf8
+en_PH
+en_PH.utf8
+en_SG
+en_SG.utf8
+en_US
+en_US.iso885915
+en_US.utf8
+en_ZA
+en_ZA.utf8
+en_ZW
+en_ZW.utf8
+es_AR
+es_AR.utf8
+es_BO
+es_BO.utf8
+es_CL
+es_CL.utf8
+es_CO
+es_CO.utf8
+es_CR
+es_CR.utf8
+es_DO
+es_DO.utf8
+es_EC
+es_EC.utf8
+es_ES
+es_ES@euro
+es_ES.utf8
+es_ES.utf8@euro
+es_GT
+es_GT.utf8
+es_HN
+es_HN.utf8
+es_MX
+es_MX.utf8
+es_NI
+es_NI.utf8
+es_PA
+es_PA.utf8
+es_PE
+es_PE.utf8
+es_PR
+es_PR.utf8
+es_PY
+es_PY.utf8
+es_SV
+es_SV.utf8
+es_US
+es_US.utf8
+es_UY
+es_UY.utf8
+es_VE
+es_VE.utf8
+et_EE
+et_EE.utf8
+eu_ES
+eu_ES@euro
+eu_ES.utf8
+eu_ES.utf8@euro
+fa_IR
+fi_FI
+fi_FI@euro
+fi_FI.utf8
+fi_FI.utf8@euro
+fo_FO
+fo_FO.utf8
+fr_BE
+fr_BE@euro
+fr_BE.utf8
+fr_BE.utf8@euro
+fr_CA
+fr_CA.utf8
+fr_CH
+fr_CH.utf8
+fr_FR
+fr_FR@euro
+fr_FR.utf8
+fr_FR.utf8@euro
+fr_LU
+fr_LU@euro
+fr_LU.utf8
+fr_LU.utf8@euro
+ga_IE
+ga_IE@euro
+ga_IE.utf8
+ga_IE.utf8@euro
+gl_ES
+gl_ES@euro
+gl_ES.utf8
+gl_ES.utf8@euro
+gv_GB
+gv_GB.utf8
+he_IL
+he_IL.utf8
+hi_IN
+hr_HR
+hr_HR.utf8
+hu_HU
+hu_HU.utf8
+id_ID
+id_ID.utf8
+is_IS
+is_IS.utf8
+it_CH
+it_CH.utf8
+it_IT
+it_IT@euro
+it_IT.utf8
+it_IT.utf8@euro
+iw_IL
+iw_IL.utf8
+ja_JP.eucjp
+ja_JP.utf8
+ka_GE
+kl_GL
+kl_GL.utf8
+ko_KR.euckr
+ko_KR.utf8
+kw_GB
+kw_GB.utf8
+lt_LT
+lt_LT.utf8
+lv_LV
+lv_LV.utf8
+mi_NZ
+mk_MK
+mk_MK.utf8
+mr_IN
+ms_MY
+ms_MY.utf8
+mt_MT
+mt_MT.utf8
+nl_BE
+nl_BE@euro
+nl_BE.utf8
+nl_BE.utf8@euro
+nl_NL
+nl_NL@euro
+nl_NL.utf8
+nl_NL.utf8@euro
+nn_NO
+nn_NO.utf8
+no_NO
+no_NO.utf8
+oc_FR
+pl_PL
+pl_PL.utf8
+POSIX
+pt_BR
+pt_BR.utf8
+pt_PT
+pt_PT@euro
+pt_PT.utf8
+pt_PT.utf8@euro
+ro_RO
+ro_RO.utf8
+ru_RU
+ru_RU.koi8r
+ru_RU.utf8
+ru_UA
+ru_UA.utf8
+se_NO
+sk_SK
+sk_SK.utf8
+sl_SI
+sl_SI.utf8
+sq_AL
+sq_AL.utf8
+sr_YU
+sr_YU@cyrillic
+sr_YU.utf8
+sr_YU.utf8@cyrillic
+sv_FI
+sv_FI@euro
+sv_FI.utf8
+sv_FI.utf8@euro
+sv_SE
+sv_SE.iso885915
+sv_SE.utf8
+ta_IN
+te_IN
+tg_TJ
+th_TH
+th_TH.utf8
+tl_PH
+tr_TR
+tr_TR.utf8
+uk_UA
+uk_UA.utf8
+ur_PK
+uz_UZ
+vi_VN
+vi_VN.tcvn
+wa_BE
+wa_BE@euro
+yi_US
+zh_CN
+zh_CN.gb18030
+zh_CN.gbk
+zh_CN.utf8
+zh_HK
+zh_HK.utf8
+zh_TW
+zh_TW.euctw
+zh_TW.utf8
+</programlisting>
+</blockquote>
+</listitem>
+
+ <listitem>
+ <para>
+ <code>`locale`</code> displays environmental variables that
+ impact how locale("") will be deduced.
+ </para>
+<blockquote>
+<programlisting>
+LANG=en_US
+LC_CTYPE="en_US"
+LC_NUMERIC="en_US"
+LC_TIME="en_US"
+LC_COLLATE="en_US"
+LC_MONETARY="en_US"
+LC_MESSAGES="en_US"
+LC_PAPER="en_US"
+LC_NAME="en_US"
+LC_ADDRESS="en_US"
+LC_TELEPHONE="en_US"
+LC_MEASUREMENT="en_US"
+LC_IDENTIFICATION="en_US"
+LC_ALL=
+</programlisting>
+</blockquote>
+</listitem>
+</itemizedlist>
+
+<para>
+From Josuttis, p. 697-698, which says, that "there is only *one*
+relation (of the C++ locale mechanism) to the C locale mechanism: the
+global C locale is modified if a named C++ locale object is set as the
+global locale" (emphasis Paolo), that is:
+</para>
+
+<programlisting>std::locale::global(std::locale(""));</programlisting>
+
+<para>affects the C functions as if the following call was made:</para>
+
+<programlisting>std::setlocale(LC_ALL, "");</programlisting>
+
+<para>
+ On the other hand, there is *no* vice versa, that is, calling
+ setlocale has *no* whatsoever on the C++ locale mechanism, in
+ 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.
+</para>
+
+ </section>
+</section>
+
+<section xml:id="locales.locale.future"><info><title>Future</title></info>
+
+
+<itemizedlist>
+ <listitem>
+ <para>
+ Locale initialization: at what point does _S_classic, _S_global
+ get initialized? Can named locales assume this initialization
+ has already taken place?
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Document how named locales error check when filling data
+ members. I.e., a fr_FR locale that doesn't have
+ numpunct::truename(): does it use "true"? Or is it a blank
+ string? What's the convention?
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Explain how locale aliasing happens. When does "de_DE" use "de"
+ information? What is the rule for locales composed of just an
+ ISO language code (say, "de") and locales with both an ISO
+ language code and ISO country code (say, "de_DE").
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ What should non-required facet instantiations do? If the
+ generic implementation is provided, then how to end-users
+ provide specializations?
+ </para>
+ </listitem>
+</itemizedlist>
+</section>
+
+<bibliography xml:id="locales.locale.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <citetitle>
+ The GNU C Library
+ </citetitle>
+ <author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
+ <copyright>
+ <year>2007</year>
+ <holder>FSF</holder>
+ </copyright>
+ <pagenums>
+ Chapters 6 Character Set Handling and 7 Locales and
+ Internationalization
+ </pagenums>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ Correspondence
+ </citetitle>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
+ <copyright>
+ <year>2002</year>
+ <holder/>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 14882:1998 Programming languages - C++
+ </citetitle>
+ <copyright>
+ <year>1998</year>
+ <holder>ISO</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 9899:1999 Programming languages - C
+ </citetitle>
+ <copyright>
+ <year>1999</year>
+ <holder>ISO</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <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)
+ </link>
+ </title>
+ <copyright>
+ <year>2008</year>
+ <holder>
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+ </holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ The C++ Programming Language, Special Edition
+ </citetitle>
+ <author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder>Addison Wesley, Inc.</holder>
+ </copyright>
+ <pagenums>Appendix D</pagenums>
+ <publisher>
+ <publishername>
+ Addison Wesley
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ Standard C++ IOStreams and Locales
+ </citetitle>
+ <subtitle>
+ Advanced Programmer's Guide and Reference
+ </subtitle>
+ <author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
+ <author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder>Addison Wesley Longman, Inc.</holder>
+ </copyright>
+ <publisher>
+ <publishername>
+ Addison Wesley Longman
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/localization.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/localization.xml
new file mode 100644
index 000000000..d05ca4d7d
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/localization.xml
@@ -0,0 +1,47 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.localization" xreflabel="Localization">
+<?dbhtml filename="localization.html"?>
+
+<info><title>
+ Localization
+ <indexterm><primary>Localization</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<!-- Section 01 : Locale -->
+<section xml:id="std.localization.locales" xreflabel="Locales"><info><title>Locales</title></info>
+<?dbhtml filename="locales.html"?>
+
+
+ <!-- Section 01 : locale -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="locale.xml">
+ </xi:include>
+</section>
+
+<!-- Section 02 : Facet -->
+<section xml:id="std.localization.facet" xreflabel="Facets"><info><title>Facets</title></info>
+<?dbhtml filename="facets.html"?>
+
+
+ <!-- Section 01 : ctype -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="ctype.xml">
+ </xi:include>
+
+ <!-- Section 02 : codecvt -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="codecvt.xml">
+ </xi:include>
+
+ <!-- Section 03 : messages -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="messages.xml">
+ </xi:include>
+</section>
+
+<!-- Section 03 : Interacting with C -->
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/messages.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/messages.xml
new file mode 100644
index 000000000..72d2f0a55
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/messages.xml
@@ -0,0 +1,568 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.localization.facet.messages" xreflabel="Messages">
+<?dbhtml filename="messages.html"?>
+
+<info><title>messages</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>messages</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+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.
+</para>
+
+<section xml:id="facet.messages.req"><info><title>Requirements</title></info>
+
+
+<para>
+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
+locale to the other. For instance, converting the "C" locale's
+<code>const char* c = "please"</code> to a German-localized <code>"bitte"</code>
+during program execution.
+</para>
+
+<blockquote>
+<para>
+22.2.7.1 - Template class messages [lib.locale.messages]
+</para>
+</blockquote>
+
+<para>
+This class has three public member functions, which directly
+correspond to three protected virtual member functions.
+</para>
+
+<para>
+The public member functions are:
+</para>
+
+<para>
+<code>catalog open(const string&amp;, const locale&amp;) const</code>
+</para>
+
+<para>
+<code>string_type get(catalog, int, int, const string_type&amp;) const</code>
+</para>
+
+<para>
+<code>void close(catalog) const</code>
+</para>
+
+<para>
+While the virtual functions are:
+</para>
+
+<para>
+<code>catalog do_open(const string&amp;, const locale&amp;) const</code>
+</para>
+<blockquote>
+<para>
+<emphasis>
+-1- Returns: A value that may be passed to get() to retrieve a
+message, from the message catalog identified by the string name
+according to an implementation-defined mapping. The result can be used
+until it is passed to close(). Returns a value less than 0 if no such
+catalog can be opened.
+</emphasis>
+</para>
+</blockquote>
+
+<para>
+<code>string_type do_get(catalog, int, int, const string_type&amp;) const</code>
+</para>
+<blockquote>
+<para>
+<emphasis>
+-3- Requires: A catalog cat obtained from open() and not yet closed.
+-4- Returns: A message identified by arguments set, msgid, and dfault,
+according to an implementation-defined mapping. If no such message can
+be found, returns dfault.
+</emphasis>
+</para>
+</blockquote>
+
+<para>
+<code>void do_close(catalog) const</code>
+</para>
+<blockquote>
+<para>
+<emphasis>
+-5- Requires: A catalog cat obtained from open() and not yet closed.
+-6- Effects: Releases unspecified resources associated with cat.
+-7- Notes: The limit on such resources, if any, is implementation-defined.
+</emphasis>
+</para>
+</blockquote>
+
+
+</section>
+
+<section xml:id="facet.messages.design"><info><title>Design</title></info>
+
+
+<para>
+A couple of notes on the standard.
+</para>
+
+<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> 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>
+Second, by making the member functions <code>const</code>, it is
+impossible to save state in them. Thus, storing away information used
+in the 'open' member function for use in 'get' is impossible. This is
+unfortunate.
+</para>
+
+<para>
+The 'open' member function in particular seems to be oddly
+designed. The signature seems quite peculiar. Why specify a <code>const
+string&amp; </code> argument, for instance, instead of just <code>const
+char*</code>? Or, why specify a <code>const locale&amp;</code> argument that is
+to be used in the 'get' member function? How, exactly, is this locale
+argument useful? What was the intent? It might make sense if a locale
+argument was associated with a given default message string in the
+'open' member function, for instance. Quite murky and unclear, on
+reflection.
+</para>
+
+<para>
+Lastly, it seems odd that messages, which explicitly require code
+conversion, don't use the codecvt facet. Because the messages facet
+has only one template parameter, it is assumed that ctype, and not
+codecvt, is to be used to convert between character sets.
+</para>
+
+<para>
+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.
+</para>
+
+</section>
+
+<section xml:id="facet.messages.impl"><info><title>Implementation</title></info>
+
+
+ <section xml:id="messages.impl.models"><info><title>Models</title></info>
+
+ <para>
+ 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
+ norm. Adding functionality that would be useful to programmers and
+ comparable to Java's java.text.MessageFormat takes a bit of work,
+ and is highly dependent on the capabilities of the underlying
+ operating system.
+ </para>
+
+ <para>
+ Three different mechanisms have been provided, selectable via
+ configure flags:
+ </para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ generic
+ </para>
+ <para>
+ This model does very little, and is what is used by default.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ gnu
+ </para>
+ <para>
+ The gnu model is complete and fully tested. It's based on the
+ GNU gettext package, which is part of glibc. It uses the
+ functions <code>textdomain, bindtextdomain, gettext</code> to
+ implement full functionality. Creating message catalogs is a
+ relatively straight-forward process and is lightly documented
+ below, and fully documented in gettext's distributed
+ documentation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ ieee_1003.1-200x
+ </para>
+ <para>
+ This is a complete, though untested, implementation based on
+ the IEEE standard. The functions <code>catopen, catgets,
+ catclose</code> are used to retrieve locale-specific messages
+ given the appropriate message catalogs that have been
+ constructed for their use. Note, the script <code>
+ po2msg.sed</code> that is part of the gettext distribution can
+ convert gettext catalogs into catalogs that
+ <code>catopen</code> can use.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+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.
+</para>
+
+ </section>
+
+ <section xml:id="messages.impl.gnu"><info><title>The GNU Model</title></info>
+
+
+ <para>
+ 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"
+ library locale support is necessary for more than just the
+ <code>LC_MESSAGES</code> mask: <code>LC_CTYPE</code> is also
+ necessary. To avoid any unpleasantness, all bits of the "C" mask
+ (i.e. <code>LC_ALL</code>) are set before retrieving messages.
+ </para>
+
+ <para>
+ 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:
+ </para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ Make a source file with the required string literals that need
+ to be translated. See <code>intl/string_literals.cc</code> for
+ an example.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make initial catalog (see "4 Making the PO Template File" from
+ the gettext docs).</para>
+ <para>
+ <code> xgettext --c++ --debug string_literals.cc -o libstdc++.pot </code>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Make language and country-specific locale catalogs.</para>
+ <para>
+ <code>cp libstdc++.pot fr_FR.po</code>
+ </para>
+ <para>
+ <code>cp libstdc++.pot de_DE.po</code>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Edit localized catalogs in emacs so that strings are
+ translated.
+ </para>
+ <para>
+ <code>emacs fr_FR.po</code>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Make the binary mo files.</para>
+ <para>
+ <code>msgfmt fr_FR.po -o fr_FR.mo</code>
+ </para>
+ <para>
+ <code>msgfmt de_DE.po -o de_DE.mo</code>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Copy the binary files into the correct directory structure.</para>
+ <para>
+ <code>cp fr_FR.mo (dir)/fr_FR/LC_MESSAGES/libstdc++.mo</code>
+ </para>
+ <para>
+ <code>cp de_DE.mo (dir)/de_DE/LC_MESSAGES/libstdc++.mo</code>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Use the new message catalogs.</para>
+ <para>
+ <code>locale loc_de("de_DE");</code>
+ </para>
+ <para>
+ <code>
+ use_facet&lt;messages&lt;char&gt; &gt;(loc_de).open("libstdc++", locale(), dir);
+ </code>
+ </para>
+ </listitem>
+</itemizedlist>
+
+ </section>
+</section>
+
+<section xml:id="facet.messages.use"><info><title>Use</title></info>
+
+ <para>
+ A simple example using the GNU model of message conversion.
+ </para>
+
+<programlisting>
+#include &lt;iostream&gt;
+#include &lt;locale&gt;
+using namespace std;
+
+void test01()
+{
+ typedef messages&lt;char&gt;::catalog catalog;
+ const char* dir =
+ "/mnt/egcs/build/i686-pc-linux-gnu/libstdc++/po/share/locale";
+ const locale loc_de("de_DE");
+ const messages&lt;char&gt;&amp; mssg_de = use_facet&lt;messages&lt;char&gt; &gt;(loc_de);
+
+ catalog cat_de = mssg_de.open("libstdc++", loc_de, dir);
+ string s01 = mssg_de.get(cat_de, 0, 0, "please");
+ string s02 = mssg_de.get(cat_de, 0, 0, "thank you");
+ cout &lt;&lt; "please in german:" &lt;&lt; s01 &lt;&lt; '\n';
+ cout &lt;&lt; "thank you in german:" &lt;&lt; s02 &lt;&lt; '\n';
+ mssg_de.close(cat_de);
+}
+</programlisting>
+
+</section>
+
+<section xml:id="facet.messages.future"><info><title>Future</title></info>
+
+
+<itemizedlist>
+<listitem>
+ <para>
+ Things that are sketchy, or remain unimplemented:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ _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
+ set based conversion, due to the fact that the template
+ parameter for messages is not enough to instantiate the
+ codecvt facet (1 supplied, need at least 2 but would prefer
+ 3).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ There are issues with gettext needing the global locale set
+ to extract a message. This dependence on the global locale
+ makes the current "gnu" model non MT-safe. Future versions
+ of glibc, i.e. glibc 2.3.x will fix this, and the C++ library
+ bits are already in place.
+ </para>
+ </listitem>
+ </itemizedlist>
+</listitem>
+
+<listitem>
+ <para>
+ Development versions of the GNU "C" library, glibc 2.3 will allow
+ a more efficient, MT implementation of std::messages, and will
+ allow the removal of the _M_name_messages data member. If this is
+ done, it will change the library ABI. The C++ parts to support
+ glibc 2.3 have already been coded, but are not in use: once this
+ version of the "C" library is released, the marked parts of the
+ messages implementation can be switched over to the new "C"
+ library functionality.
+ </para>
+</listitem>
+<listitem>
+ <para>
+ At some point in the near future, std::numpunct will probably use
+ std::messages facilities to implement truename/falsename
+ correctly. This is currently not done, but entries in
+ libstdc++.pot have already been made for "true" and "false" string
+ literals, so all that remains is the std::numpunct coding and the
+ configure/make hassles to make the installed library search its
+ own catalog. Currently the libstdc++.mo catalog is only searched
+ for the testsuite cases involving messages members.
+ </para>
+</listitem>
+
+<listitem>
+ <para> The following member functions:</para>
+
+ <para>
+ <code>
+ catalog
+ open(const basic_string&lt;char&gt;&amp; __s, const locale&amp; __loc) const
+ </code>
+ </para>
+
+ <para>
+ <code>
+ catalog
+ open(const basic_string&lt;char&gt;&amp;, const locale&amp;, const char*) const;
+ </code>
+ </para>
+
+ <para>
+ Don't actually return a "value less than 0 if no such catalog
+ can be opened" as required by the standard in the "gnu"
+ model. As of this writing, it is unknown how to query to see
+ if a specified message catalog exists using the gettext
+ package.
+ </para>
+</listitem>
+</itemizedlist>
+
+</section>
+
+<bibliography xml:id="facet.messages.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <citetitle>
+ The GNU C Library
+ </citetitle>
+ <author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
+ <copyright>
+ <year>2007</year>
+ <holder>FSF</holder>
+ </copyright>
+ <pagenums>Chapters 6 Character Set Handling, and 7 Locales and Internationalization
+ </pagenums>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ Correspondence
+ </citetitle>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
+ <copyright>
+ <year>2002</year>
+ <holder/>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 14882:1998 Programming languages - C++
+ </citetitle>
+ <copyright>
+ <year>1998</year>
+ <holder>ISO</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ ISO/IEC 9899:1999 Programming languages - C
+ </citetitle>
+
+ <copyright>
+ <year>1999</year>
+ <holder>ISO</holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <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)
+ </link>
+ </title>
+ <copyright>
+ <year>2008</year>
+ <holder>
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+ </holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ The C++ Programming Language, Special Edition
+ </citetitle>
+ <author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder>Addison Wesley, Inc.</holder>
+ </copyright>
+ <pagenums>Appendix D</pagenums>
+ <publisher>
+ <publishername>
+ Addison Wesley
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ Standard C++ IOStreams and Locales
+ </citetitle>
+ <subtitle>
+ Advanced Programmer's Guide and Reference
+ </subtitle>
+ <author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
+ <author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
+ <copyright>
+ <year>2000</year>
+ <holder>Addison Wesley Longman, Inc.</holder>
+ </copyright>
+ <publisher>
+ <publishername>
+ Addison Wesley Longman
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <pagenums>java.util.Properties, java.text.MessageFormat,
+java.util.Locale, java.util.ResourceBundle
+ </pagenums>
+ </biblioentry>
+
+
+ <biblioentry>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="https://www.gnu.org/software/gettext/">
+ GNU gettext tools, version 0.10.38, Native Language Support
+ Library and Tools.
+ </link>
+ </title>
+
+ </biblioentry>
+
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/mt_allocator.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/mt_allocator.xml
new file mode 100644
index 000000000..12fe2ee3b
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/mt_allocator.xml
@@ -0,0 +1,555 @@
+<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>The mt_allocator</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>allocator</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+</para>
+
+<section xml:id="allocator.mt.intro"><info><title>Intro</title></info>
+
+
+<para>
+ 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.
+</para>
+
+<para>
+ The aim of this document is to describe - from an application point of
+ view - the "inner workings" of the allocator.
+</para>
+
+</section>
+
+
+<section xml:id="allocator.mt.design_issues"><info><title>Design Issues</title></info>
+<?dbhtml filename="mt_allocator_design.html"?>
+
+
+<section xml:id="allocator.mt.overview"><info><title>Overview</title></info>
+
+
+
+<para> 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.
+</para>
+
+<para>The datum describing pools characteristics is
+</para>
+<programlisting>
+ template&lt;bool _Thread&gt;
+ class __pool
+</programlisting>
+<para> This class is parametrized on thread support, and is explicitly
+specialized for both multiple threads (with <code>bool==true</code>)
+and single threads (via <code>bool==false</code>.) It is possible to
+use a custom pool datum instead of the default class that is provided.
+</para>
+
+<para> There are two distinct policy classes, each of which can be used
+with either type of underlying pool datum.
+</para>
+
+<programlisting>
+ template&lt;bool _Thread&gt;
+ struct __common_pool_policy
+
+ template&lt;typename _Tp, bool _Thread&gt;
+ struct __per_type_pool_policy
+</programlisting>
+
+<para> The first policy, <code>__common_pool_policy</code>, implements a
+common pool. This means that allocators that are instantiated with
+different types, say <code>char</code> and <code>long</code> will both
+use the same pool. This is the default policy.
+</para>
+
+<para> The second policy, <code>__per_type_pool_policy</code>, implements
+a separate pool for each instantiating type. Thus, <code>char</code>
+and <code>long</code> will use separate pools. This allows per-type
+tuning, for instance.
+</para>
+
+<para> Putting this all together, the actual allocator class is
+</para>
+<programlisting>
+ template&lt;typename _Tp, typename _Poolp = __default_policy&gt;
+ class __mt_alloc : public __mt_alloc_base&lt;_Tp&gt;, _Poolp
+</programlisting>
+<para> This class has the interface required for standard library allocator
+classes, namely member functions <code>allocate</code> and
+<code>deallocate</code>, plus others.
+</para>
+
+</section>
+</section>
+
+<section xml:id="allocator.mt.impl"><info><title>Implementation</title></info>
+<?dbhtml filename="mt_allocator_impl.html"?>
+
+
+
+<section xml:id="allocator.mt.tune"><info><title>Tunable Parameters</title></info>
+
+
+<para>Certain allocation parameters can be modified, or tuned. There
+exists a nested <code>struct __pool_base::_Tune</code> that contains all
+these parameters, which include settings for
+</para>
+ <itemizedlist>
+ <listitem><para>Alignment</para></listitem>
+ <listitem><para>Maximum bytes before calling <code>::operator new</code> directly</para></listitem>
+ <listitem><para>Minimum bytes</para></listitem>
+ <listitem><para>Size of underlying global allocations</para></listitem>
+ <listitem><para>Maximum number of supported threads</para></listitem>
+ <listitem><para>Migration of deallocations to the global free list</para></listitem>
+ <listitem><para>Shunt for global <code>new</code> and <code>delete</code></para></listitem>
+ </itemizedlist>
+<para>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:
+</para>
+<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;
+}
+</programlisting>
+
+</section>
+
+<section xml:id="allocator.mt.init"><info><title>Initialization</title></info>
+
+
+<para>
+The static variables (pointers to freelists, tuning parameters etc)
+are initialized as above, or are set to the global defaults.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+- 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).
+</para>
+<para>
+ - 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;
+</para>
+
+<para>
+- 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.
+</para>
+<para>
+ - 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;
+</para>
+<para>
+ - 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.
+</para>
+
+</section>
+
+<section xml:id="allocator.mt.deallocation"><info><title>Deallocation Notes</title></info>
+
+
+<para> 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>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.
+</para>
+
+<para>
+ On systems with the function <code>__cxa_atexit</code>, the
+allocator can be forced to free all memory allocated before program
+termination with the member function
+<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>__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>__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
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup">
+ example.</link>
+</para>
+
+</section>
+
+</section>
+
+<section xml:id="allocator.mt.example_single"><info><title>Single Thread Example</title></info>
+<?dbhtml filename="mt_allocator_ex_single.html"?>
+
+
+<para>
+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):
+</para>
+<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 |
+| |
+| |
+| |
+| |
+| |
+| |
+| |
++----------------+
+</programlisting>
+
+<para>
+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).
+</para>
+<para>
+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.
+</para>
+<para>
+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.
+</para>
+<para>
+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.
+</para>
+<para>
+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.
+</para>
+
+<para>
+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 ]).
+</para>
+
+<para>
+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.
+</para>
+
+</section>
+
+<section xml:id="allocator.mt.example_multi"><info><title>Multiple Thread Example</title></info>
+<?dbhtml filename="mt_allocator_ex_multi.html"?>
+
+
+<para>
+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.
+</para>
+
+<para>
+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).
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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).
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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).
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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).
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/numerics.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/numerics.xml
new file mode 100644
index 000000000..495735502
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/numerics.xml
@@ -0,0 +1,146 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.numerics" xreflabel="Numerics">
+<?dbhtml filename="numerics.html"?>
+
+<info><title>
+ Numerics
+ <indexterm><primary>Numerics</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<!-- Sect1 01 : Complex -->
+<section xml:id="std.numerics.complex" xreflabel="complex"><info><title>Complex</title></info>
+<?dbhtml filename="complex.html"?>
+
+ <para>
+ </para>
+ <section xml:id="numerics.complex.processing" xreflabel="complex Processing"><info><title>complex Processing</title></info>
+
+ <para>
+ </para>
+ <para>Using <code>complex&lt;&gt;</code> becomes even more comple- er, sorry,
+ <emphasis>complicated</emphasis>, 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
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://david.tribble.com/text/cdiffs.htm#C99-complex">here</link>.
+ </para>
+ <para><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
+ math operators defined, as well as definitions of <code>op&lt;&lt;</code>
+ and <code>op&gt;&gt;</code> that work with iostreams: <code>op&lt;&lt;</code>
+ prints <code>(u,v)</code> and <code>op&gt;&gt;</code> can read <code>u</code>,
+ <code>(u)</code>, and <code>(u,v)</code>.
+ </para>
+ <para>As an extension to C++11 and for increased compatibility with C,
+ <code>&lt;complex.h&gt;</code> includes both <code>&lt;complex&gt;</code>
+ and the C99 <code>&lt;complex.h&gt;</code> (if the C library provides
+ it).
+ </para>
+
+ </section>
+</section>
+
+<!-- Sect1 02 : Generalized Operations -->
+<section xml:id="std.numerics.generalized_ops" xreflabel="Generalized Ops"><info><title>Generalized Operations</title></info>
+<?dbhtml filename="generalized_numeric_operations.html"?>
+
+ <para>
+ </para>
+
+ <para>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:
+ </para>
+ <itemizedlist>
+ <listitem><para><code>accumulate</code></para></listitem>
+ <listitem><para><code>inner_product</code></para></listitem>
+ <listitem><para><code>chapterial_sum</code></para></listitem>
+ <listitem><para><code>adjacent_difference</code></para></listitem>
+ </itemizedlist>
+ <para>Here is a simple example of the two forms of <code>accumulate</code>.
+ </para>
+ <programlisting>
+ int ar[50];
+ int someval = somefunction();
+
+ // ...initialize members of ar to something...
+
+ int sum = std::accumulate(ar,ar+50,0);
+ int sum_stuff = std::accumulate(ar,ar+50,someval);
+ int product = std::accumulate(ar,ar+50,1,std::multiplies&lt;int&gt;());
+ </programlisting>
+ <para>The first call adds all the members of the array, using zero as an
+ initial value for <code>sum</code>. The second does the same, but uses
+ <code>someval</code> as the starting value (thus, <code>sum_stuff == sum +
+ someval</code>). The final call uses the second of the two signatures,
+ and multiplies all the members of the array; here we must obviously
+ use 1 as a starting value instead of 0.
+ </para>
+ <para>The other three functions have similar dual-signature forms.
+ </para>
+
+</section>
+
+<!-- Sect1 03 : Interacting with C -->
+<section xml:id="std.numerics.c" xreflabel="Interacting with C"><info><title>Interacting with C</title></info>
+<?dbhtml filename="numerics_and_c.html"?>
+
+
+ <section xml:id="numerics.c.array" xreflabel="Numerics vs. Arrays"><info><title>Numerics vs. Arrays</title></info>
+
+
+ <para>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>restrict</code>, to apply to individual pointers. The
+ C++ solution is contained in the library rather than the language
+ (although many vendors can be expected to add this to their compilers
+ as an extension).
+ </para>
+ <para>That library solution is a set of two classes, five template classes,
+ and "a whole bunch" of functions. The classes are required
+ to be free of pointer aliasing, so compilers can optimize the
+ daylights out of them the same way that they have been for FORTRAN.
+ They are collectively called <code>valarray</code>, although strictly
+ 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.
+ </para>
+
+ </section>
+
+ <section xml:id="numerics.c.c99" xreflabel="C99"><info><title>C99</title></info>
+
+
+ <para>In addition to the other topics on this page, we'll note here some
+ of the C99 features that appear in libstdc++.
+ </para>
+ <para>The C99 features depend on the <code>--enable-c99</code> configure flag.
+ This flag is already on by default, but it can be disabled by the
+ user. Also, the configuration machinery will disable it if the
+ necessary support for C99 (e.g., header files) cannot be found.
+ </para>
+ <para>As of GCC 3.0, C99 support includes classification functions
+ such as <code>isnormal</code>, <code>isgreater</code>,
+ <code>isnan</code>, etc.
+ The functions used for 'long long' support such as <code>strtoll</code>
+ are supported, as is the <code>lldiv_t</code> typedef. Also supported
+ are the wide character functions using 'long long', like
+ <code>wcstoll</code>.
+ </para>
+
+ </section>
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/parallel_mode.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/parallel_mode.xml
new file mode 100644
index 000000000..6dc81c9fc
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/parallel_mode.xml
@@ -0,0 +1,876 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.parallel_mode" xreflabel="Parallel Mode">
+<?dbhtml filename="parallel_mode.html"?>
+
+<info><title>Parallel Mode</title>
+ <keywordset>
+ <keyword>C++</keyword>
+ <keyword>library</keyword>
+ <keyword>parallel</keyword>
+ </keywordset>
+</info>
+
+
+
+<para> The libstdc++ parallel mode is an experimental parallel
+implementation of many algorithms the C++ Standard Library.
+</para>
+
+<para>
+Several of the standard algorithms, for instance
+<function>std::sort</function>, are made parallel using OpenMP
+annotations. These parallel mode constructs and can be invoked by
+explicit source declaration or by compiling existing sources with a
+specific compiler flag.
+</para>
+
+
+<section xml:id="manual.ext.parallel_mode.intro" xreflabel="Intro"><info><title>Intro</title></info>
+
+
+<para>The following library components in the include
+<filename class="headerfile">numeric</filename> are included in the parallel mode:</para>
+<itemizedlist>
+ <listitem><para><function>std::accumulate</function></para></listitem>
+ <listitem><para><function>std::adjacent_difference</function></para></listitem>
+ <listitem><para><function>std::inner_product</function></para></listitem>
+ <listitem><para><function>std::partial_sum</function></para></listitem>
+</itemizedlist>
+
+<para>The following library components in the include
+<filename class="headerfile">algorithm</filename> are included in the parallel mode:</para>
+<itemizedlist>
+ <listitem><para><function>std::adjacent_find</function></para></listitem>
+ <listitem><para><function>std::count</function></para></listitem>
+ <listitem><para><function>std::count_if</function></para></listitem>
+ <listitem><para><function>std::equal</function></para></listitem>
+ <listitem><para><function>std::find</function></para></listitem>
+ <listitem><para><function>std::find_if</function></para></listitem>
+ <listitem><para><function>std::find_first_of</function></para></listitem>
+ <listitem><para><function>std::for_each</function></para></listitem>
+ <listitem><para><function>std::generate</function></para></listitem>
+ <listitem><para><function>std::generate_n</function></para></listitem>
+ <listitem><para><function>std::lexicographical_compare</function></para></listitem>
+ <listitem><para><function>std::mismatch</function></para></listitem>
+ <listitem><para><function>std::search</function></para></listitem>
+ <listitem><para><function>std::search_n</function></para></listitem>
+ <listitem><para><function>std::transform</function></para></listitem>
+ <listitem><para><function>std::replace</function></para></listitem>
+ <listitem><para><function>std::replace_if</function></para></listitem>
+ <listitem><para><function>std::max_element</function></para></listitem>
+ <listitem><para><function>std::merge</function></para></listitem>
+ <listitem><para><function>std::min_element</function></para></listitem>
+ <listitem><para><function>std::nth_element</function></para></listitem>
+ <listitem><para><function>std::partial_sort</function></para></listitem>
+ <listitem><para><function>std::partition</function></para></listitem>
+ <listitem><para><function>std::random_shuffle</function></para></listitem>
+ <listitem><para><function>std::set_union</function></para></listitem>
+ <listitem><para><function>std::set_intersection</function></para></listitem>
+ <listitem><para><function>std::set_symmetric_difference</function></para></listitem>
+ <listitem><para><function>std::set_difference</function></para></listitem>
+ <listitem><para><function>std::sort</function></para></listitem>
+ <listitem><para><function>std::stable_sort</function></para></listitem>
+ <listitem><para><function>std::unique_copy</function></para></listitem>
+</itemizedlist>
+
+</section>
+
+<section xml:id="manual.ext.parallel_mode.semantics" xreflabel="Semantics"><info><title>Semantics</title></info>
+<?dbhtml filename="parallel_mode_semantics.html"?>
+
+
+<para> 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.
+</para>
+
+<para> Since the current GCC OpenMP implementation does not support
+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.</para>
+
+</section>
+
+<section xml:id="manual.ext.parallel_mode.using" xreflabel="Using"><info><title>Using</title></info>
+<?dbhtml filename="parallel_mode_using.html"?>
+
+
+<section xml:id="parallel_mode.using.prereq_flags"><info><title>Prerequisite Compiler Flags</title></info>
+
+
+<para>
+ 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 <literal>-fopenmp</literal>. This will 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>
+
+<para>
+In addition, hardware that supports atomic operations and a compiler
+ capable of producing atomic operations is mandatory: GCC defaults to no
+ support for atomic operations on some common hardware
+ architectures. Activating atomic operations may require explicit
+ compiler flags on some targets (like sparc and x86), such
+ as <literal>-march=i686</literal>,
+ <literal>-march=native</literal> or <literal>-mcpu=v9</literal>. See
+ the GCC manual for more information.
+</para>
+
+</section>
+
+<section xml:id="parallel_mode.using.parallel_mode"><info><title>Using Parallel Mode</title></info>
+
+
+<para>
+ To use the libstdc++ parallel mode, compile your application with
+ the prerequisite flags as detailed above, and in addition
+ add <constant>-D_GLIBCXX_PARALLEL</constant>. This will convert all
+ use of the standard (sequential) algorithms to the appropriate parallel
+ equivalents. Please note that this doesn't necessarily mean that
+ everything will end up being executed in a parallel manner, but
+ rather that the heuristics and settings coded into the parallel
+ versions will be used to determine if all, some, or no algorithms
+ will be executed using parallel variants.
+</para>
+
+<para>Note that the <constant>_GLIBCXX_PARALLEL</constant> define may change the
+ sizes and behavior of standard class templates such as
+ <function>std::search</function>, and therefore one can only link code
+ compiled with parallel mode and code compiled without parallel mode
+ 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.
+</para>
+</section>
+
+<section xml:id="parallel_mode.using.specific"><info><title>Using Specific Parallel Components</title></info>
+
+
+<para>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
+ drop-in algorithms used in parallel mode, but they are available in
+ a separate namespace as GNU extensions and may be used in programs
+ compiled with either release mode or with parallel mode.
+</para>
+
+
+<para>An example of using a parallel version
+of <function>std::sort</function>, but no other parallel algorithms, is:
+</para>
+
+<programlisting>
+#include &lt;vector&gt;
+#include &lt;parallel/algorithm&gt;
+
+int main()
+{
+ std::vector&lt;int&gt; v(100);
+
+ // ...
+
+ // Explicitly force a call to parallel sort.
+ __gnu_parallel::sort(v.begin(), v.end());
+ return 0;
+}
+</programlisting>
+
+<para>
+Then compile this code with the prerequisite compiler flags
+(<literal>-fopenmp</literal> and any necessary architecture-specific
+flags for atomic operations.)
+</para>
+
+<para> The following table provides the names and headers of all the
+ parallel algorithms that can be used in a similar manner:
+</para>
+
+<table frame="all">
+<title>Parallel Algorithms</title>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+
+<thead>
+ <row>
+ <entry>Algorithm</entry>
+ <entry>Header</entry>
+ <entry>Parallel algorithm</entry>
+ <entry>Parallel header</entry>
+ </row>
+</thead>
+
+<tbody>
+ <row>
+ <entry><function>std::accumulate</function></entry>
+ <entry><filename class="headerfile">numeric</filename></entry>
+ <entry><function>__gnu_parallel::accumulate</function></entry>
+ <entry><filename class="headerfile">parallel/numeric</filename></entry>
+ </row>
+ <row>
+ <entry><function>std::adjacent_difference</function></entry>
+ <entry><filename class="headerfile">numeric</filename></entry>
+ <entry><function>__gnu_parallel::adjacent_difference</function></entry>
+ <entry><filename class="headerfile">parallel/numeric</filename></entry>
+ </row>
+ <row>
+ <entry><function>std::inner_product</function></entry>
+ <entry><filename class="headerfile">numeric</filename></entry>
+ <entry><function>__gnu_parallel::inner_product</function></entry>
+ <entry><filename class="headerfile">parallel/numeric</filename></entry>
+ </row>
+ <row>
+ <entry><function>std::partial_sum</function></entry>
+ <entry><filename class="headerfile">numeric</filename></entry>
+ <entry><function>__gnu_parallel::partial_sum</function></entry>
+ <entry><filename class="headerfile">parallel/numeric</filename></entry>
+ </row>
+ <row>
+ <entry><function>std::adjacent_find</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::adjacent_find</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::count</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::count</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::count_if</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::count_if</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::equal</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::equal</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::find</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::find</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::find_if</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::find_if</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::find_first_of</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::find_first_of</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::for_each</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::for_each</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::generate</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::generate</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::generate_n</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::generate_n</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::lexicographical_compare</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::lexicographical_compare</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::mismatch</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::mismatch</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::search</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::search</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::search_n</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::search_n</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::transform</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::transform</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::replace</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::replace</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::replace_if</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::replace_if</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::max_element</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::max_element</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::merge</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::merge</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::min_element</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::min_element</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::nth_element</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::nth_element</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::partial_sort</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::partial_sort</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::partition</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::partition</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::random_shuffle</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::random_shuffle</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::set_union</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::set_union</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::set_intersection</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::set_intersection</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::set_symmetric_difference</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::set_symmetric_difference</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::set_difference</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::set_difference</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::sort</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::sort</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::stable_sort</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::stable_sort</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+
+ <row>
+ <entry><function>std::unique_copy</function></entry>
+ <entry><filename class="headerfile">algorithm</filename></entry>
+ <entry><function>__gnu_parallel::unique_copy</function></entry>
+ <entry><filename class="headerfile">parallel/algorithm</filename></entry>
+ </row>
+</tbody>
+</tgroup>
+</table>
+
+</section>
+
+</section>
+
+<section xml:id="manual.ext.parallel_mode.design" xreflabel="Design"><info><title>Design</title></info>
+<?dbhtml filename="parallel_mode_design.html"?>
+
+ <para>
+ </para>
+<section xml:id="parallel_mode.design.intro" xreflabel="Intro"><info><title>Interface Basics</title></info>
+
+
+<para>
+All parallel algorithms are intended to have signatures that are
+equivalent to the ISO C++ algorithms replaced. For instance, the
+<function>std::adjacent_find</function> function is declared as:
+</para>
+<programlisting>
+namespace std
+{
+ template&lt;typename _FIter&gt;
+ _FIter
+ adjacent_find(_FIter, _FIter);
+}
+</programlisting>
+
+<para>
+Which means that there should be something equivalent for the parallel
+version. Indeed, this is the case:
+</para>
+
+<programlisting>
+namespace std
+{
+ namespace __parallel
+ {
+ template&lt;typename _FIter&gt;
+ _FIter
+ adjacent_find(_FIter, _FIter);
+
+ ...
+ }
+}
+</programlisting>
+
+<para>But.... why the ellipses?
+</para>
+
+<para> The ellipses in the example above represent additional overloads
+required for the parallel version of the function. These additional
+overloads are used to dispatch calls from the ISO C++ function
+signature to the appropriate parallel function (or sequential
+function, if no parallel functions are deemed worthy), based on either
+compile-time or run-time conditions.
+</para>
+
+<para> The available signature options are specific for the different
+algorithms/algorithm classes.</para>
+
+<para> The general view of overloads for the parallel algorithms look like this:
+</para>
+<itemizedlist>
+ <listitem><para>ISO C++ signature</para></listitem>
+ <listitem><para>ISO C++ signature + sequential_tag argument</para></listitem>
+ <listitem><para>ISO C++ signature + algorithm-specific tag type
+ (several signatures)</para></listitem>
+</itemizedlist>
+
+<para> Please note that the implementation may use additional functions
+(designated with the <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.
+</para>
+
+
+</section>
+
+<section xml:id="parallel_mode.design.tuning" xreflabel="Tuning"><info><title>Configuration and Tuning</title></info>
+
+
+
+<section xml:id="parallel_mode.design.tuning.omp" xreflabel="OpenMP Environment"><info><title>Setting up the OpenMP Environment</title></info>
+
+
+<para>
+Several aspects of the overall runtime environment can be manipulated
+by standard OpenMP function calls.
+</para>
+
+<para>
+To specify the number of threads to be used for the algorithms globally,
+use the function <function>omp_set_num_threads</function>. An example:
+</para>
+
+<programlisting>
+#include &lt;stdlib.h&gt;
+#include &lt;omp.h&gt;
+
+int main()
+{
+ // Explicitly set number of threads.
+ const int threads_wanted = 20;
+ omp_set_dynamic(false);
+ omp_set_num_threads(threads_wanted);
+
+ // Call parallel mode algorithms.
+
+ return 0;
+}
+</programlisting>
+
+<para>
+ Some algorithms allow the number of threads being set for a particular call,
+ by augmenting the algorithm variant.
+ See the next section for further information.
+</para>
+
+<para>
+Other parts of the runtime environment able to be manipulated include
+nested parallelism (<function>omp_set_nested</function>), schedule kind
+(<function>omp_set_schedule</function>), and others. See the OpenMP
+documentation for more information.
+</para>
+
+</section>
+
+<section xml:id="parallel_mode.design.tuning.compile" xreflabel="Compile Switches"><info><title>Compile Time Switches</title></info>
+
+
+<para>
+To force an algorithm to execute sequentially, even though parallelism
+is switched on in general via the macro <constant>_GLIBCXX_PARALLEL</constant>,
+add <classname>__gnu_parallel::sequential_tag()</classname> to the end
+of the algorithm's argument list.
+</para>
+
+<para>
+Like so:
+</para>
+
+<programlisting>
+std::sort(v.begin(), v.end(), __gnu_parallel::sequential_tag());
+</programlisting>
+
+<para>
+Some parallel algorithm variants can be excluded from compilation by
+preprocessor defines. See the doxygen documentation on
+<code>compiletime_settings.h</code> and <code>features.h</code> for details.
+</para>
+
+<para>
+For some algorithms, the desired variant can be chosen at compile-time by
+appending a tag object. The available options are specific to the particular
+algorithm (class).
+</para>
+
+<para>
+For the "embarrassingly parallel" algorithms, there is only one "tag object
+type", the enum _Parallelism.
+It takes one of the following values,
+<code>__gnu_parallel::parallel_tag</code>,
+<code>__gnu_parallel::balanced_tag</code>,
+<code>__gnu_parallel::unbalanced_tag</code>,
+<code>__gnu_parallel::omp_loop_tag</code>,
+<code>__gnu_parallel::omp_loop_static_tag</code>.
+This means that the actual parallelization strategy is chosen at run-time.
+(Choosing the variants at compile-time will come soon.)
+</para>
+
+<para>
+For the following algorithms in general, we have
+<code>__gnu_parallel::parallel_tag</code> and
+<code>__gnu_parallel::default_parallel_tag</code>, in addition to
+<code>__gnu_parallel::sequential_tag</code>.
+<code>__gnu_parallel::default_parallel_tag</code> chooses the default
+algorithm at compiletime, as does omitting the tag.
+<code>__gnu_parallel::parallel_tag</code> postpones the decision to runtime
+(see next section).
+For all tags, the number of threads desired for this call can optionally be
+passed to the respective tag's constructor.
+</para>
+
+<para>
+The <code>multiway_merge</code> algorithm comes with the additional choices,
+<code>__gnu_parallel::exact_tag</code> and
+<code>__gnu_parallel::sampling_tag</code>.
+Exact and sampling are the two available splitting strategies.
+</para>
+
+<para>
+For the <code>sort</code> and <code>stable_sort</code> algorithms, there are
+several additional choices, namely
+<code>__gnu_parallel::multiway_mergesort_tag</code>,
+<code>__gnu_parallel::multiway_mergesort_exact_tag</code>,
+<code>__gnu_parallel::multiway_mergesort_sampling_tag</code>,
+<code>__gnu_parallel::quicksort_tag</code>, and
+<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>stable_sort</code>.
+</para>
+
+</section>
+
+<section xml:id="parallel_mode.design.tuning.settings" xreflabel="_Settings"><info><title>Run Time Settings and Defaults</title></info>
+
+
+<para>
+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
+desired via manipulation
+of <classname>__gnu_parallel::_Settings</classname> member data.
+</para>
+
+<para>
+First off, the choice of parallelization strategy: serial, parallel,
+or heuristically deduced. This corresponds
+to <code>__gnu_parallel::_Settings::algorithm_strategy</code> and is a
+value of enum <type>__gnu_parallel::_AlgorithmStrategy</type>
+type. Choices
+include: <type>heuristic</type>, <type>force_sequential</type>,
+and <type>force_parallel</type>. The default is <type>heuristic</type>.
+</para>
+
+
+<para>
+Next, the sub-choices for algorithm variant, if not fixed at compile-time.
+Specific algorithms like <function>find</function> or <function>sort</function>
+can be implemented in multiple ways: when this is the case,
+a <classname>__gnu_parallel::_Settings</classname> member exists to
+pick the default strategy. For
+example, <code>__gnu_parallel::_Settings::sort_algorithm</code> can
+have any values of
+enum <type>__gnu_parallel::_SortAlgorithm</type>: <type>MWMS</type>, <type>QS</type>,
+or <type>QS_BALANCED</type>.
+</para>
+
+<para>
+Likewise for setting the minimal threshold for algorithm
+parallelization. Parallelism always incurs some overhead. Thus, it is
+not helpful to parallelize operations on very small sets of
+data. Because of this, measures are taken to avoid parallelizing below
+a certain, pre-determined threshold. For each algorithm, a minimum
+problem size is encoded as a variable in the
+active <classname>__gnu_parallel::_Settings</classname> object. This
+threshold variable follows the following naming scheme:
+<code>__gnu_parallel::_Settings::[algorithm]_minimal_n</code>. So,
+for <function>fill</function>, the threshold variable
+is <code>__gnu_parallel::_Settings::fill_minimal_n</code>,
+</para>
+
+<para>
+Finally, hardware details like L1/L2 cache size can be hardwired
+via <code>__gnu_parallel::_Settings::L1_cache_size</code> and friends.
+</para>
+
+<para>
+</para>
+
+<para>
+All these configuration variables can be changed by the user, if
+desired.
+There exists one global instance of the class <classname>_Settings</classname>,
+i. e. it is a singleton. It can be read and written by calling
+<code>__gnu_parallel::_Settings::get</code> and
+<code>__gnu_parallel::_Settings::set</code>, respectively.
+Please note that the first call return a const object, so direct manipulation
+is forbidden.
+See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01005.html">
+ <filename class="headerfile">settings.h</filename></link>
+for complete details.
+</para>
+
+<para>
+A small example of tuning the default:
+</para>
+
+<programlisting>
+#include &lt;parallel/algorithm&gt;
+#include &lt;parallel/settings.h&gt;
+
+int main()
+{
+ __gnu_parallel::_Settings s;
+ s.algorithm_strategy = __gnu_parallel::force_parallel;
+ __gnu_parallel::_Settings::set(s);
+
+ // Do work... all algorithms will be parallelized, always.
+
+ return 0;
+}
+</programlisting>
+
+</section>
+
+</section>
+
+<section xml:id="parallel_mode.design.impl" xreflabel="Impl"><info><title>Implementation Namespaces</title></info>
+
+
+<para> One namespace contain versions of code that are always
+explicitly sequential:
+<code>__gnu_serial</code>.
+</para>
+
+<para> Two namespaces contain the parallel mode:
+<code>std::__parallel</code> and <code>__gnu_parallel</code>.
+</para>
+
+<para> Parallel implementations of standard components, including
+template helpers to select parallelism, are defined in <code>namespace
+std::__parallel</code>. For instance, <function>std::transform</function> from <filename class="headerfile">algorithm</filename> has a parallel counterpart in
+<function>std::__parallel::transform</function> from <filename class="headerfile">parallel/algorithm</filename>. In addition, these parallel
+implementations are injected into <code>namespace
+__gnu_parallel</code> with using declarations.
+</para>
+
+<para> Support and general infrastructure is in <code>namespace
+__gnu_parallel</code>.
+</para>
+
+<para> 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.
+</para>
+
+</section>
+
+</section>
+
+<section xml:id="manual.ext.parallel_mode.test" xreflabel="Testing"><info><title>Testing</title></info>
+<?dbhtml filename="parallel_mode_test.html"?>
+
+
+ <para>
+ Both the normal conformance and regression tests and the
+ supplemental performance tests work.
+ </para>
+
+ <para>
+ To run the conformance and regression tests with the parallel mode
+ active,
+ </para>
+
+ <screen>
+ <userinput>make check-parallel</userinput>
+ </screen>
+
+ <para>
+ The log and summary files for conformance testing are in the
+ <filename class="directory">testsuite/parallel</filename> directory.
+ </para>
+
+ <para>
+ To run the performance tests with the parallel mode active,
+ </para>
+
+ <screen>
+ <userinput>make check-performance-parallel</userinput>
+ </screen>
+
+ <para>
+ The result file for performance testing are in the
+ <filename class="directory">testsuite</filename> directory, in the file
+ <filename>libstdc++_performance.sum</filename>. In addition, the
+ policy-based containers have their own visualizations, which have
+ additional software dependencies than the usual bare-boned text
+ file, and can be generated by using the <code>make
+ doc-performance</code> rule in the testsuite's Makefile.
+</para>
+</section>
+
+<bibliography xml:id="parallel_mode.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <citetitle>
+ Parallelization of Bulk Operations for STL Dictionaries
+ </citetitle>
+
+ <author><personname><firstname>Johannes</firstname><surname>Singler</surname></personname></author>
+ <author><personname><firstname>Leonor</firstname><surname>Frias</surname></personname></author>
+
+ <copyright>
+ <year>2007</year>
+ <holder/>
+ </copyright>
+
+ <publisher>
+ <publishername>
+ Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ The Multi-Core Standard Template Library
+ </citetitle>
+
+ <author><personname><firstname>Johannes</firstname><surname>Singler</surname></personname></author>
+ <author><personname><firstname>Peter</firstname><surname>Sanders</surname></personname></author>
+ <author><personname><firstname>Felix</firstname><surname>Putze</surname></personname></author>
+
+ <copyright>
+ <year>2007</year>
+ <holder/>
+ </copyright>
+
+ <publisher>
+ <publishername>
+ Euro-Par 2007: Parallel Processing. (LNCS 4641)
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+</bibliography>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/policy_data_structures.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/policy_data_structures.xml
new file mode 100644
index 000000000..09a1db028
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/policy_data_structures.xml
@@ -0,0 +1,5110 @@
+<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>
+
+ <!-- S06: Biblio -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="policy_data_structures_biblio.xml">
+</xi:include>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml
new file mode 100644
index 000000000..49cacf034
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/manual/prerequisites.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/prerequisites.xml
new file mode 100644
index 000000000..aa6776475
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/prerequisites.xml
@@ -0,0 +1,133 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.setup.prereq" xreflabel="Prerequisites">
+<?dbhtml filename="prerequisites.html"?>
+
+<info><title>Prerequisites</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>Prerequisites</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+ Because libstdc++ is part of GCC, the primary source for
+ installation instructions is
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/">the GCC install page</link>.
+ In particular, list of prerequisite software needed to build the library
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/prerequisites.html">
+ starts with those requirements.</link> The same pages also list
+ the tools you will need if you wish to modify the source.
+</para>
+
+ <para>
+ Additional data is given here only where it applies to libstdc++.
+ </para>
+
+ <para>As of GCC 4.0.1 the minimum version of binutils required to build
+ libstdc++ is <code>2.15.90.0.1.1</code>.
+ Older releases of libstdc++ do not require such a recent version,
+ but to take full advantage of useful space-saving features and
+ bug-fixes you should use a recent binutils whenever possible.
+ The configure process will automatically detect and use these
+ features if the underlying support is present.
+ </para>
+
+ <para>
+ To generate the API documentation from the sources you will need
+ Doxygen, see <link linkend="appendix.porting.doc">Documentation
+ Hacking</link> in the appendix for full details.
+ </para>
+
+ <para>
+ Finally, a few system-specific requirements:
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>linux</term>
+
+ <listitem>
+ <para>
+ 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
+ means that glibc 2.3 or later is required.
+ </para>
+
+ <para>
+ If the 'gnu' locale model is being used, the following
+ locales are used and tested in the libstdc++ testsuites.
+ The first column is the name of the locale, the second is
+ the character set it is expected to use.
+ </para>
+<programlisting>
+de_DE ISO-8859-1
+de_DE@euro ISO-8859-15
+en_GB ISO-8859-1
+en_HK ISO-8859-1
+en_PH ISO-8859-1
+en_US ISO-8859-1
+en_US.ISO-8859-1 ISO-8859-1
+en_US.ISO-8859-15 ISO-8859-15
+en_US.UTF-8 UTF-8
+es_ES ISO-8859-1
+es_MX ISO-8859-1
+fr_FR ISO-8859-1
+fr_FR@euro ISO-8859-15
+is_IS UTF-8
+it_IT ISO-8859-1
+ja_JP.eucjp EUC-JP
+ru_RU.ISO-8859-5 ISO-8859-5
+ru_RU.UTF-8 UTF-8
+se_NO.UTF-8 UTF-8
+ta_IN UTF-8
+zh_TW BIG5
+</programlisting>
+
+ <para>Failure to have installed the underlying "C" library
+ locale information for any of the above regions means that
+ the corresponding C++ named locale will not work: because of
+ this, the libstdc++ testsuite will skip named locale tests
+ which need missing information. If this isn't an issue, don't
+ worry about it. If a named locale is needed, the underlying
+ locale information must be installed. Note that rebuilding
+ libstdc++ after "C" locales are installed is not necessary.
+ </para>
+
+ <para>
+ To install support for locales, do only one of the following:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>install all locales</para>
+ </listitem>
+ <listitem>
+ <para>install just the necessary locales</para>
+ <itemizedlist>
+ <listitem>
+ <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>
+ </listitem>
+ <listitem>
+ <para>on most Unix-like operating systems:</para>
+ <para><code> localedef -i de_DE -f ISO-8859-1 de_DE </code></para>
+ <para>(repeat for each entry in the above list) </para>
+ </listitem>
+ <listitem>
+ <para>
+ Instructions for other operating systems solicited.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/profile_mode.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/profile_mode.xml
new file mode 100644
index 000000000..63c3928a8
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/profile_mode.xml
@@ -0,0 +1,1718 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.profile_mode" xreflabel="Profile Mode">
+<?dbhtml filename="profile_mode.html"?>
+
+<info><title>Profile Mode</title>
+ <keywordset>
+ <keyword>C++</keyword>
+ <keyword>library</keyword>
+ <keyword>profile</keyword>
+ </keywordset>
+</info>
+
+
+
+
+<section xml:id="manual.ext.profile_mode.intro" xreflabel="Intro"><info><title>Intro</title></info>
+
+ <para>
+ <emphasis>Goal: </emphasis>Give performance improvement advice based on
+ recognition of suboptimal usage patterns of the standard library.
+ </para>
+
+ <para>
+ <emphasis>Method: </emphasis>Wrap the standard library code. Insert
+ calls to an instrumentation library to record the internal state of
+ various components at interesting entry/exit points to/from the standard
+ library. Process trace, recognize suboptimal patterns, give advice.
+ For details, see
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
+ CGO 2009</link>.
+ </para>
+ <para>
+ <emphasis>Strengths: </emphasis>
+<itemizedlist>
+ <listitem><para>
+ Unintrusive solution. The application code does not require any
+ modification.
+ </para></listitem>
+ <listitem><para> The advice is call context sensitive, thus capable of
+ identifying precisely interesting dynamic performance behavior.
+ </para></listitem>
+ <listitem><para>
+ The overhead model is pay-per-view. When you turn off a diagnostic class
+ at compile time, its overhead disappears.
+ </para></listitem>
+</itemizedlist>
+ </para>
+ <para>
+ <emphasis>Drawbacks: </emphasis>
+<itemizedlist>
+ <listitem><para>
+ You must recompile the application code with custom options.
+ </para></listitem>
+ <listitem><para>You must run the application on representative input.
+ The advice is input dependent.
+ </para></listitem>
+ <listitem><para>
+ The execution time will increase, in some cases by factors.
+ </para></listitem>
+</itemizedlist>
+ </para>
+
+
+<section xml:id="manual.ext.profile_mode.using" xreflabel="Using"><info><title>Using the Profile Mode</title></info>
+
+
+ <para>
+ This is the anticipated common workflow for program <code>foo.cc</code>:
+<programlisting>
+$ cat foo.cc
+#include &lt;vector&gt;
+int main() {
+ vector&lt;int&gt; v;
+ for (int k = 0; k &lt; 1024; ++k) v.insert(v.begin(), k);
+}
+
+$ g++ -D_GLIBCXX_PROFILE foo.cc
+$ ./a.out
+$ cat libstdcxx-profile.txt
+vector-to-list: improvement = 5: call stack = 0x804842c ...
+ : advice = change std::vector to std::list
+vector-size: improvement = 3: call stack = 0x804842c ...
+ : advice = change initial container size from 0 to 1024
+</programlisting>
+ </para>
+
+ <para>
+ Anatomy of a warning:
+ <itemizedlist>
+ <listitem>
+ <para>
+ Warning id. This is a short descriptive string for the class
+ that this warning belongs to. E.g., "vector-to-list".
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Estimated improvement. This is an approximation of the benefit expected
+ from implementing the change suggested by the warning. It is given on
+ a log10 scale. Negative values mean that the alternative would actually
+ do worse than the current choice.
+ In the example above, 5 comes from the fact that the overhead of
+ inserting at the beginning of a vector vs. a list is around 1024 * 1024 / 2,
+ which is around 10e5. The improvement from setting the initial size to
+ 1024 is in the range of 10e3, since the overhead of dynamic resizing is
+ linear in this case.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Call stack. Currently, the addresses are printed without
+ symbol name or code location attribution.
+ Users are expected to postprocess the output using, for instance, addr2line.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The warning message. For some warnings, this is static text, e.g.,
+ "change vector to list". For other warnings, such as the one above,
+ the message contains numeric advice, e.g., the suggested initial size
+ of the vector.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>Three files are generated. <code>libstdcxx-profile.txt</code>
+ contains human readable advice. <code>libstdcxx-profile.raw</code>
+ contains implementation specific data about each diagnostic.
+ Their format is not documented. They are sufficient to generate
+ all the advice given in <code>libstdcxx-profile.txt</code>. The advantage
+ of keeping this raw format is that traces from multiple executions can
+ be aggregated simply by concatenating the raw traces. We intend to
+ offer an external utility program that can issue advice from a trace.
+ <code>libstdcxx-profile.conf.out</code> lists the actual diagnostic
+ parameters used. To alter parameters, edit this file and rename it to
+ <code>libstdcxx-profile.conf</code>.
+ </para>
+
+ <para>Advice is given regardless whether the transformation is valid.
+ For instance, we advise changing a map to an unordered_map even if the
+ application semantics require that data be ordered.
+ 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.
+ </para>
+
+</section>
+
+<section xml:id="manual.ext.profile_mode.tuning" xreflabel="Tuning"><info><title>Tuning the Profile Mode</title></info>
+
+
+ <para>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.
+ <itemizedlist>
+ <listitem><para>
+ <code>_GLIBCXX_PROFILE_NO_&lt;diagnostic&gt;</code>:
+ disable specific diagnostics.
+ See section Diagnostics for possible values.
+ (Environment variables not supported.)
+ </para></listitem>
+ <listitem><para>
+ <code>_GLIBCXX_PROFILE_TRACE_PATH_ROOT</code>: set an alternative root
+ path for the output files.
+ </para></listitem>
+ <listitem><para>_GLIBCXX_PROFILE_MAX_WARN_COUNT: set it to the maximum
+ number of warnings desired. The default value is 10.</para></listitem>
+ <listitem><para>
+ <code>_GLIBCXX_PROFILE_MAX_STACK_DEPTH</code>: if set to 0,
+ the advice will
+ be collected and reported for the program as a whole, and not for each
+ call context.
+ This could also be used in continuous regression tests, where you
+ just need to know whether there is a regression or not.
+ The default value is 32.
+ </para></listitem>
+ <listitem><para>
+ <code>_GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC</code>:
+ set a limit on how much memory to use for the accounting tables for each
+ diagnostic type. When this limit is reached, new events are ignored
+ until the memory usage decreases under the limit. Generally, this means
+ that newly created containers will not be instrumented until some
+ live containers are deleted. The default is 128 MB.
+ </para></listitem>
+ <listitem><para>
+ <code>_GLIBCXX_PROFILE_NO_THREADS</code>:
+ Make the library not use threads. If thread local storage (TLS) is not
+ available, you will get a preprocessor error asking you to set
+ -D_GLIBCXX_PROFILE_NO_THREADS if your program is single-threaded.
+ Multithreaded execution without TLS is not supported.
+ (Environment variable not supported.)
+ </para></listitem>
+ <listitem><para>
+ <code>_GLIBCXX_HAVE_EXECINFO_H</code>:
+ This name should be defined automatically at library configuration time.
+ If your library was configured without <code>execinfo.h</code>, but
+ you have it in your include path, you can define it explicitly. Without
+ it, advice is collected for the program as a whole, and not for each
+ call context.
+ (Environment variable not supported.)
+ </para></listitem>
+ </itemizedlist>
+ </para>
+
+</section>
+
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.design" xreflabel="Design"><info><title>Design</title></info>
+<?dbhtml filename="profile_mode_design.html"?>
+
+
+<para>
+</para>
+<table frame="all">
+<title>Profile Code Location</title>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+
+<thead>
+ <row>
+ <entry>Code Location</entry>
+ <entry>Use</entry>
+ </row>
+</thead>
+<tbody>
+ <row>
+ <entry><code>libstdc++-v3/include/std/*</code></entry>
+ <entry>Preprocessor code to redirect to profile extension headers.</entry>
+ </row>
+ <row>
+ <entry><code>libstdc++-v3/include/profile/*</code></entry>
+ <entry>Profile extension public headers (map, vector, ...).</entry>
+ </row>
+ <row>
+ <entry><code>libstdc++-v3/include/profile/impl/*</code></entry>
+ <entry>Profile extension internals. Implementation files are
+ only included from <code>impl/profiler.h</code>, which is the only
+ file included from the public headers.</entry>
+ </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+</para>
+
+<section xml:id="manual.ext.profile_mode.design.wrapper" xreflabel="Wrapper"><info><title>Wrapper Model</title></info>
+
+ <para>
+ In order to get our instrumented library version included instead of the
+ release one,
+ we use the same wrapper model as the debug mode.
+ We subclass entities from the release version. Wherever
+ <code>_GLIBCXX_PROFILE</code> is defined, the release namespace is
+ <code>std::__norm</code>, whereas the profile namespace is
+ <code>std::__profile</code>. Using plain <code>std</code> translates
+ into <code>std::__profile</code>.
+ </para>
+ <para>
+ Whenever possible, we try to wrap at the public interface level, e.g.,
+ in <code>unordered_set</code> rather than in <code>hashtable</code>,
+ in order not to depend on implementation.
+ </para>
+ <para>
+ Mixing object files built with and without the profile mode must
+ not affect the program execution. However, there are no guarantees to
+ the accuracy of diagnostics when using even a single object not built with
+ <code>-D_GLIBCXX_PROFILE</code>.
+ 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.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.design.instrumentation" xreflabel="Instrumentation"><info><title>Instrumentation</title></info>
+
+ <para>
+ Instead of instrumenting every public entry and exit point,
+ we chose to add instrumentation on demand, as needed
+ by individual diagnostics.
+ The main reason is that some diagnostics require us to extract bits of
+ internal state that are particular only to that diagnostic.
+ We plan to formalize this later, after we learn more about the requirements
+ of several diagnostics.
+ </para>
+ <para>
+ All the instrumentation points can be switched on and off using
+ <code>-D[_NO]_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code> options.
+ With all the instrumentation calls off, there should be negligible
+ overhead over the release version. This property is needed to support
+ diagnostics based on timing of internal operations. For such diagnostics,
+ we anticipate turning most of the instrumentation off in order to prevent
+ profiling overhead from polluting time measurements, and thus diagnostics.
+ </para>
+ <para>
+ All the instrumentation on/off compile time switches live in
+ <code>include/profile/profiler.h</code>.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.design.rtlib" xreflabel="Run Time Behavior"><info><title>Run Time Behavior</title></info>
+
+ <para>
+ For practical reasons, the instrumentation library processes the trace
+ partially
+ rather than dumping it to disk in raw form. Each event is processed when
+ it occurs. It is usually attached a cost and it is aggregated into
+ the database of a specific diagnostic class. The cost model
+ is based largely on the standard performance guarantees, but in some
+ cases we use knowledge about GCC's standard library implementation.
+ </para>
+ <para>
+ Information is indexed by (1) call stack and (2) instance id or address
+ to be able to understand and summarize precise creation-use-destruction
+ dynamic chains. Although the analysis is sensitive to dynamic instances,
+ the reports are only sensitive to call context. Whenever a dynamic instance
+ is destroyed, we accumulate its effect to the corresponding entry for the
+ call stack of its constructor location.
+ </para>
+
+ <para>
+ For details, see
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
+ CGO 2009</link>.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.design.analysis" xreflabel="Analysis and Diagnostics"><info><title>Analysis and Diagnostics</title></info>
+
+ <para>
+ 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.
+ </para>
+ <para>
+ 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.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.design.cost-model" xreflabel="Cost Model"><info><title>Cost Model</title></info>
+
+ <para>
+ 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.
+ </para>
+<itemizedlist>
+ <listitem><para><emphasis>Relative benefit estimation:</emphasis>
+ 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
+ of the <code>insert</code> method will generally count as a benefit.
+ Its magnitude depends on (1) the number of elements that get shifted
+ and (2) whether it triggers a reallocation.
+ </para></listitem>
+ <listitem><para><emphasis>Synthetic measurements:</emphasis>
+ We will measure the relative difference between similar operations on
+ different containers. We plan to write a battery of small tests that
+ compare the times of the executions of similar methods on different
+ containers. The idea is to run these tests on the target machine.
+ If this training phase is very quick, we may decide to perform it at
+ library initialization time. The results can be cached on disk and reused
+ across runs.
+ </para></listitem>
+ <listitem><para><emphasis>Timers:</emphasis>
+ We plan to use timers for operations of larger granularity, such as sort.
+ For instance, we can switch between different sort methods on the fly
+ and report the one that performs best for each call context.
+ </para></listitem>
+ <listitem><para><emphasis>Show stoppers:</emphasis>
+ We may decide that the presence of an operation nullifies the advice.
+ For instance, when considering switching from <code>set</code> to
+ <code>unordered_set</code>, if we detect use of operator <code>++</code>,
+ we will simply not issue the advice, since this could signal that the use
+ care require a sorted container.</para></listitem>
+</itemizedlist>
+
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.design.reports" xreflabel="Reports"><info><title>Reports</title></info>
+
+ <para>
+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
+to a code position and possibly a call stack.
+ </para>
+ <para>
+Second, we report performance characteristics for which we do not have
+a clear solution for improvement. For instance, we can point to the user
+the top 10 <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.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.design.testing" xreflabel="Testing"><info><title>Testing</title></info>
+
+ <para>
+ First, we want to make sure we preserve the behavior of the release mode.
+ You can just type <code>"make check-profile"</code>, which
+ builds and runs the whole test suite in profile mode.
+ </para>
+ <para>
+ Second, we want to test the correctness of each diagnostic.
+ We created a <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.
+ </para>
+</section>
+
+</section>
+
+<section xml:id="manual.ext.profile_mode.api" xreflabel="API"><info><title>Extensions for Custom Containers</title></info>
+<?dbhtml filename="profile_mode_api.html"?>
+
+
+ <para>
+ 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>profiler.h</code> (look for "Instrumentation hooks").
+ </para>
+
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.cost_model" xreflabel="Cost Model"><info><title>Empirical Cost Model</title></info>
+<?dbhtml filename="profile_mode_cost_model.html"?>
+
+
+ <para>
+ 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.
+ </para>
+ <para>
+ (Under development.)
+ We are working on customizing this to a particular machine by providing
+ an automated way to compute the actual relative weights for operations
+ on the given machine.
+ </para>
+ <para>
+ (Under development.)
+ We plan to provide a performance parameter database format that can be
+ 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.
+ </para>
+
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.implementation" xreflabel="Implementation"><info><title>Implementation Issues</title></info>
+<?dbhtml filename="profile_mode_impl.html"?>
+
+
+
+<section xml:id="manual.ext.profile_mode.implementation.stack" xreflabel="Stack Traces"><info><title>Stack Traces</title></info>
+
+ <para>
+ 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
+ it is imperative to reference application code, not library code.
+ </para>
+ <para>
+ Currently we are using the libc <code>backtrace</code> routine to get
+ stack traces.
+ <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.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.implementation.symbols" xreflabel="Symbolization"><info><title>Symbolization of Instruction Addresses</title></info>
+
+ <para>
+ 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.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.implementation.concurrency" xreflabel="Concurrency"><info><title>Concurrency</title></info>
+
+ <para>
+ 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.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.implementation.stdlib-in-proflib" xreflabel="Using the Standard Library in the Runtime Library"><info><title>Using the Standard Library in the Instrumentation Implementation</title></info>
+
+ <para>
+ 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.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.implementation.malloc-hooks" xreflabel="Malloc Hooks"><info><title>Malloc Hooks</title></info>
+
+ <para>
+ 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
+ malloc hook code.
+ </para>
+ <para>
+ We protect against reentrance to the profile mode instrumentation code,
+ which should avoid this problem in most cases.
+ The protection mechanism is thread safe and exception safe.
+ This mechanism does not prevent reentrance to the malloc hook itself,
+ which could still result in deadlock, if, for instance, the malloc hook
+ 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++.
+ </para>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.implementation.construction-destruction" xreflabel="Construction and Destruction of Global Objects"><info><title>Construction and Destruction of Global Objects</title></info>
+
+ <para>
+ 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>atexit</code>, thus invoked by
+ <code>exit</code>.
+ </para>
+</section>
+
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.developer" xreflabel="Developer Information"><info><title>Developer Information</title></info>
+<?dbhtml filename="profile_mode_devel.html"?>
+
+
+<section xml:id="manual.ext.profile_mode.developer.bigpic" xreflabel="Big Picture"><info><title>Big Picture</title></info>
+
+
+ <para>The profile mode headers are included with
+ <code>-D_GLIBCXX_PROFILE</code> through preprocessor directives in
+ <code>include/std/*</code>.
+ </para>
+
+ <para>Instrumented implementations are provided in
+ <code>include/profile/*</code>. All instrumentation hooks are macros
+ defined in <code>include/profile/profiler.h</code>.
+ </para>
+
+ <para>All the implementation of the instrumentation hooks is in
+ <code>include/profile/impl/*</code>. Although all the code gets included,
+ thus is publicly visible, only a small number of functions are called from
+ outside this directory. All calls to hook implementations must be
+ done through macros defined in <code>profiler.h</code>. The macro
+ 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>-D_GLIBCXX_PROFILE_...</code> compiler option.
+ </para>
+
+</section>
+
+<section xml:id="manual.ext.profile_mode.developer.howto" xreflabel="How To Add A Diagnostic"><info><title>How To Add A Diagnostic</title></info>
+
+
+ <para>Let's say the diagnostic name is "magic".
+ </para>
+
+ <para>If you need to instrument a header not already under
+ <code>include/profile/*</code>, first edit the corresponding header
+ under <code>include/std/</code> and add a preprocessor directive such
+ as the one in <code>include/std/vector</code>:
+<programlisting>
+#ifdef _GLIBCXX_PROFILE
+# include &lt;profile/vector&gt;
+#endif
+</programlisting>
+ </para>
+
+ <para>If the file you need to instrument is not yet under
+ <code>include/profile/</code>, make a copy of the one in
+ <code>include/debug</code>, or the main implementation.
+ You'll need to include the main implementation and inherit the classes
+ you want to instrument. Then define the methods you want to instrument,
+ define the instrumentation hooks and add calls to them.
+ Look at <code>include/profile/vector</code> for an example.
+ </para>
+
+ <para>Add macros for the instrumentation hooks in
+ <code>include/profile/impl/profiler.h</code>.
+ Hook names must start with <code>__profcxx_</code>.
+ Make sure they transform
+ in no code with <code>-D_NO_GLBICXX_PROFILE_MAGIC</code>.
+ Make sure all calls to any method in namespace <code>__gnu_profile</code>
+ is protected against reentrance using macro
+ <code>_GLIBCXX_PROFILE_REENTRANCE_GUARD</code>.
+ All names of methods in namespace <code>__gnu_profile</code> called from
+ <code>profiler.h</code> must start with <code>__trace_magic_</code>.
+ </para>
+
+ <para>Add the implementation of the diagnostic.
+ <itemizedlist>
+ <listitem><para>
+ Create new file <code>include/profile/impl/profiler_magic.h</code>.
+ </para></listitem>
+ <listitem><para>
+ Define class <code>__magic_info: public __object_info_base</code>.
+ This is the representation of a line in the object table.
+ The <code>__merge</code> method is used to aggregate information
+ across all dynamic instances created at the same call context.
+ The <code>__magnitude</code> must return the estimation of the benefit
+ as a number of small operations, e.g., number of words copied.
+ The <code>__write</code> method is used to produce the raw trace.
+ The <code>__advice</code> method is used to produce the advice string.
+ </para></listitem>
+ <listitem><para>
+ Define class <code>__magic_stack_info: public __magic_info</code>.
+ This defines the content of a line in the stack table.
+ </para></listitem>
+ <listitem><para>
+ Define class <code>__trace_magic: public __trace_base&lt;__magic_info,
+ __magic_stack_info&gt;</code>.
+ It defines the content of the trace associated with this diagnostic.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+
+ <para>Add initialization and reporting calls in
+ <code>include/profile/impl/profiler_trace.h</code>. Use
+ <code>__trace_vector_to_list</code> as an example.
+ </para>
+
+ <para>Add documentation in file <code>doc/xml/manual/profile_mode.xml</code>.
+ </para>
+</section>
+</section>
+
+<section xml:id="manual.ext.profile_mode.diagnostics"><info><title>Diagnostics</title></info>
+<?dbhtml filename="profile_mode_diagnostics.html"?>
+
+
+ <para>
+ The table below presents all the diagnostics we intend to implement.
+ Each diagnostic has a corresponding compile time switch
+ <code>-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
+ Groups of related diagnostics can be turned on with a single switch.
+ For instance, <code>-D_GLIBCXX_PROFILE_LOCALITY</code> is equivalent to
+ <code>-D_GLIBCXX_PROFILE_SOFTWARE_PREFETCH
+ -D_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
+ </para>
+
+ <para>
+ The benefit, cost, expected frequency and accuracy of each diagnostic
+ was given a grade from 1 to 10, where 10 is highest.
+ A high benefit means that, if the diagnostic is accurate, the expected
+ performance improvement is high.
+ A high cost means that turning this diagnostic on leads to high slowdown.
+ A high frequency means that we expect this to occur relatively often.
+ 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.
+ </para>
+
+<table frame="all">
+<title>Profile Diagnostics</title>
+
+<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>Group</entry>
+ <entry>Flag</entry>
+ <entry>Benefit</entry>
+ <entry>Cost</entry>
+ <entry>Freq.</entry>
+ <entry>Implemented</entry>
+ </row>
+</thead>
+<tbody>
+ <row>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.containers">
+ CONTAINERS</link></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.hashtable_too_small">
+ HASHTABLE_TOO_SMALL</link></entry>
+ <entry>10</entry>
+ <entry>1</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.hashtable_too_large">
+ HASHTABLE_TOO_LARGE</link></entry>
+ <entry>5</entry>
+ <entry>1</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.inefficient_hash">
+ INEFFICIENT_HASH</link></entry>
+ <entry>7</entry>
+ <entry>3</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.vector_too_small">
+ VECTOR_TOO_SMALL</link></entry>
+ <entry>8</entry>
+ <entry>1</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.vector_too_large">
+ VECTOR_TOO_LARGE</link></entry>
+ <entry>5</entry>
+ <entry>1</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.vector_to_hashtable">
+ VECTOR_TO_HASHTABLE</link></entry>
+ <entry>7</entry>
+ <entry>7</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.hashtable_to_vector">
+ HASHTABLE_TO_VECTOR</link></entry>
+ <entry>7</entry>
+ <entry>7</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.vector_to_list">
+ VECTOR_TO_LIST</link></entry>
+ <entry>8</entry>
+ <entry>5</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>yes</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.list_to_vector">
+ LIST_TO_VECTOR</link></entry>
+ <entry>10</entry>
+ <entry>5</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.assoc_ord_to_unord">
+ ORDERED_TO_UNORDERED</link></entry>
+ <entry>10</entry>
+ <entry>5</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>only map/unordered_map</entry>
+ </row>
+ <row>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.algorithms">
+ ALGORITHMS</link></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.algorithms.sort">
+ SORT</link></entry>
+ <entry>7</entry>
+ <entry>8</entry>
+ <entry/>
+ <entry>7</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.locality">
+ LOCALITY</link></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.locality.sw_prefetch">
+ SOFTWARE_PREFETCH</link></entry>
+ <entry>8</entry>
+ <entry>8</entry>
+ <entry/>
+ <entry>5</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.locality.linked">
+ RBTREE_LOCALITY</link></entry>
+ <entry>4</entry>
+ <entry>8</entry>
+ <entry/>
+ <entry>5</entry>
+ <entry>no</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.mthread.false_share">
+ FALSE_SHARING</link></entry>
+ <entry>8</entry>
+ <entry>10</entry>
+ <entry/>
+ <entry>10</entry>
+ <entry>no</entry>
+ </row>
+</tbody>
+</tgroup>
+</table>
+
+<section xml:id="manual.ext.profile_mode.analysis.template" xreflabel="Template"><info><title>Diagnostic Template</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> What problem will it diagnose?
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>.
+ What is the fundamental reason why this is a problem</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>
+ Percentage reduction in execution time. When reduction is more than
+ a constant factor, describe the reduction rate formula.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>
+ What would the advise look like?</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis>
+ What stdlibc++ components need to be instrumented?</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ How do we decide when to issue the advice?</para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ How do we measure benefits? Math goes here.</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+program code
+...
+advice sample
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.analysis.containers" xreflabel="Containers"><info><title>Containers</title></info>
+
+
+<para>
+<emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_CONTAINERS</code>.
+</para>
+
+<section xml:id="manual.ext.profile_mode.analysis.hashtable_too_small" xreflabel="Hashtable Too Small"><info><title>Hashtable Too Small</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect hashtables with many
+ rehash operations, small construction size and large destruction size.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis> Rehash is very expensive.
+ Read content, follow chains within bucket, evaluate hash function, place at
+ new location in different order.</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis> 36%.
+ Code similar to example below.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>
+ Set initial size to N at construction site S.
+ </para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis>
+ <code>unordered_set, unordered_map</code> constructor, destructor, rehash.
+ </para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ For each dynamic instance of <code>unordered_[multi]set|map</code>,
+ record initial size and call context of the constructor.
+ Record size increase, if any, after each relevant operation such as insert.
+ Record the estimated rehash cost.</para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Number of individual rehash operations * cost per rehash.</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 unordered_set&lt;int&gt; us;
+2 for (int k = 0; k &lt; 1000000; ++k) {
+3 us.insert(k);
+4 }
+
+foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1025530 rehash operations.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.analysis.hashtable_too_large" xreflabel="Hashtable Too Large"><info><title>Hashtable Too Large</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect hashtables which are
+ never filled up because fewer elements than reserved are ever
+ inserted.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis> Save memory, which
+ is good in itself and may also improve memory reference performance through
+ fewer cache and TLB misses.</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis> unknown.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>
+ Set initial size to N at construction site S.
+ </para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis>
+ <code>unordered_set, unordered_map</code> constructor, destructor, rehash.
+ </para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ For each dynamic instance of <code>unordered_[multi]set|map</code>,
+ record initial size and call context of the constructor, and correlate it
+ with its size at destruction time.
+ </para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Number of iteration operations + memory saved.</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 vector&lt;unordered_set&lt;int&gt;&gt; v(100000, unordered_set&lt;int&gt;(100)) ;
+2 for (int k = 0; k &lt; 100000; ++k) {
+3 for (int j = 0; j &lt; 10; ++j) {
+4 v[k].insert(k + j);
+5 }
+6 }
+
+foo.cc:1: advice: Changing initial unordered_set size from 100 to 10 saves N
+bytes of memory and M iteration steps.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.inefficient_hash" xreflabel="Inefficient Hash"><info><title>Inefficient Hash</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_INEFFICIENT_HASH</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect hashtables with polarized
+ distribution.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis> A non-uniform
+ distribution may lead to long chains, thus possibly increasing complexity
+ by a factor up to the number of elements.
+ </para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis> factor up
+ to container size.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis> Change hash function
+ for container built at site S. Distribution score = N. Access score = S.
+ Longest chain = C, in bucket B.
+ </para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis>
+ <code>unordered_set, unordered_map</code> constructor, destructor, [],
+ insert, iterator.
+ </para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ Count the exact number of link traversals.
+ </para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Total number of links traversed.</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+class dumb_hash {
+ public:
+ size_t operator() (int i) const { return 0; }
+};
+...
+ unordered_set&lt;int, dumb_hash&gt; hs;
+ ...
+ for (int i = 0; i &lt; COUNT; ++i) {
+ hs.find(i);
+ }
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.vector_too_small" xreflabel="Vector Too Small"><info><title>Vector Too Small</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_VECTOR_TOO_SMALL</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis>Detect vectors with many
+ resize operations, small construction size and large destruction size..
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>Resizing can be expensive.
+ Copying large amounts of data takes time. Resizing many small vectors may
+ have allocation overhead and affect locality.</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>
+ Set initial size to N at construction site S.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis><code>vector</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ For each dynamic instance of <code>vector</code>,
+ record initial size and call context of the constructor.
+ Record size increase, if any, after each relevant operation such as
+ <code>push_back</code>. Record the estimated resize cost.
+ </para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Total number of words copied * time to copy a word.</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 vector&lt;int&gt; v;
+2 for (int k = 0; k &lt; 1000000; ++k) {
+3 v.push_back(k);
+4 }
+
+foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves
+copying 4000000 bytes and 20 memory allocations and deallocations.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.vector_too_large" xreflabel="Vector Too Large"><info><title>Vector Too Large</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_VECTOR_TOO_LARGE</code>
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis>Detect vectors which are
+ never filled up because fewer elements than reserved are ever
+ inserted.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>Save memory, which
+ is good in itself and may also improve memory reference performance through
+ fewer cache and TLB misses.</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>
+ Set initial size to N at construction site S.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis><code>vector</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ For each dynamic instance of <code>vector</code>,
+ record initial size and call context of the constructor, and correlate it
+ with its size at destruction time.</para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Total amount of memory saved.</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 vector&lt;vector&lt;int&gt;&gt; v(100000, vector&lt;int&gt;(100)) ;
+2 for (int k = 0; k &lt; 100000; ++k) {
+3 for (int j = 0; j &lt; 10; ++j) {
+4 v[k].insert(k + j);
+5 }
+6 }
+
+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.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.vector_to_hashtable" xreflabel="Vector to Hashtable"><info><title>Vector to Hashtable</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect uses of
+ <code>vector</code> that can be substituted with <code>unordered_set</code>
+ to reduce execution time.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ Linear search in a vector is very expensive, whereas searching in a hashtable
+ is very quick.</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>factor up
+ to container size.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>Replace
+ <code>vector</code> with <code>unordered_set</code> at site S.
+ </para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis><code>vector</code>
+ operations and access methods.</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ For each dynamic instance of <code>vector</code>,
+ record call context of the constructor. Issue the advice only if the
+ only methods called on this <code>vector</code> are <code>push_back</code>,
+ <code>insert</code> and <code>find</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Cost(vector::push_back) + cost(vector::insert) + cost(find, vector) -
+ cost(unordered_set::insert) + cost(unordered_set::find).
+ </para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 vector&lt;int&gt; v;
+...
+2 for (int i = 0; i &lt; 1000; ++i) {
+3 find(v.begin(), v.end(), i);
+4 }
+
+foo.cc:1: advice: Changing "vector" to "unordered_set" will save about 500,000
+comparisons.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.hashtable_to_vector" xreflabel="Hashtable to Vector"><info><title>Hashtable to Vector</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect uses of
+ <code>unordered_set</code> that can be substituted with <code>vector</code>
+ to reduce execution time.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ Hashtable iterator is slower than vector iterator.</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>95%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>Replace
+ <code>unordered_set</code> with <code>vector</code> at site S.
+ </para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis><code>unordered_set</code>
+ operations and access methods.</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ For each dynamic instance of <code>unordered_set</code>,
+ record call context of the constructor. Issue the advice only if the
+ number of <code>find</code>, <code>insert</code> and <code>[]</code>
+ operations on this <code>unordered_set</code> are small relative to the
+ number of elements, and methods <code>begin</code> or <code>end</code>
+ are invoked (suggesting iteration).</para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Number of .</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 unordered_set&lt;int&gt; us;
+...
+2 int s = 0;
+3 for (unordered_set&lt;int&gt;::iterator it = us.begin(); it != us.end(); ++it) {
+4 s += *it;
+5 }
+
+foo.cc:1: advice: Changing "unordered_set" to "vector" will save about N
+indirections and may achieve better data locality.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.vector_to_list" xreflabel="Vector to List"><info><title>Vector to List</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_VECTOR_TO_LIST</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect cases where
+ <code>vector</code> could be substituted with <code>list</code> for
+ better performance.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ Inserting in the middle of a vector is expensive compared to inserting in a
+ list.
+ </para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>factor up to
+ container size.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>Replace vector with list
+ at site S.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis><code>vector</code>
+ operations and access methods.</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ For each dynamic instance of <code>vector</code>,
+ record the call context of the constructor. Record the overhead of each
+ <code>insert</code> operation based on current size and insert position.
+ Report instance with high insertion overhead.
+ </para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ (Sum(cost(vector::method)) - Sum(cost(list::method)), for
+ method in [push_back, insert, erase])
+ + (Cost(iterate vector) - Cost(iterate list))</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 vector&lt;int&gt; v;
+2 for (int i = 0; i &lt; 10000; ++i) {
+3 v.insert(v.begin(), i);
+4 }
+
+foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000
+operations.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.list_to_vector" xreflabel="List to Vector"><info><title>List to Vector</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_LIST_TO_VECTOR</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect cases where
+ <code>list</code> could be substituted with <code>vector</code> for
+ better performance.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ Iterating through a vector is faster than through a list.
+ </para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>64%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>Replace list with vector
+ at site S.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis><code>vector</code>
+ operations and access methods.</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ Issue the advice if there are no <code>insert</code> operations.
+ </para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ (Sum(cost(vector::method)) - Sum(cost(list::method)), for
+ method in [push_back, insert, erase])
+ + (Cost(iterate vector) - Cost(iterate list))</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 list&lt;int&gt; l;
+...
+2 int sum = 0;
+3 for (list&lt;int&gt;::iterator it = l.begin(); it != l.end(); ++it) {
+4 sum += *it;
+5 }
+
+foo.cc:1: advice: Changing "list" to "vector" will save about 1000000 indirect
+memory references.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.list_to_slist" xreflabel="List to Forward List"><info><title>List to Forward List (Slist)</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_LIST_TO_SLIST</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect cases where
+ <code>list</code> could be substituted with <code>forward_list</code> for
+ better performance.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ The memory footprint of a forward_list is smaller than that of a list.
+ This has beneficial effects on memory subsystem, e.g., fewer cache misses.
+ </para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>40%.
+ Note that the reduction is only noticeable if the size of the forward_list
+ node is in fact larger than that of the list node. For memory allocators
+ with size classes, you will only notice an effect when the two node sizes
+ belong to different allocator size classes.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>Replace list with
+ forward_list at site S.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis><code>list</code>
+ operations and iteration methods.</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ Issue the advice if there are no <code>backwards</code> traversals
+ or insertion before a given node.
+ </para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Always true.</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 list&lt;int&gt; l;
+...
+2 int sum = 0;
+3 for (list&lt;int&gt;::iterator it = l.begin(); it != l.end(); ++it) {
+4 sum += *it;
+5 }
+
+foo.cc:1: advice: Change "list" to "forward_list".
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.assoc_ord_to_unord" xreflabel="Ordered to Unordered Associative Container"><info><title>Ordered to Unordered Associative Container</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_ORDERED_TO_UNORDERED</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect cases where ordered
+ associative containers can be replaced with unordered ones.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ Insert and search are quicker in a hashtable than in
+ a red-black tree.</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>52%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>
+ Replace set with unordered_set at site S.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis>
+ <code>set</code>, <code>multiset</code>, <code>map</code>,
+ <code>multimap</code> methods.</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ Issue the advice only if we are not using operator <code>++</code> on any
+ iterator on a particular <code>[multi]set|map</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ (Sum(cost(hashtable::method)) - Sum(cost(rbtree::method)), for
+ method in [insert, erase, find])
+ + (Cost(iterate hashtable) - Cost(iterate rbtree))</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 set&lt;int&gt; s;
+2 for (int i = 0; i &lt; 100000; ++i) {
+3 s.insert(i);
+4 }
+5 int sum = 0;
+6 for (int i = 0; i &lt; 100000; ++i) {
+7 sum += *s.find(i);
+8 }
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+</section>
+
+
+
+<section xml:id="manual.ext.profile_mode.analysis.algorithms" xreflabel="Algorithms"><info><title>Algorithms</title></info>
+
+
+ <para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_ALGORITHMS</code>.
+ </para>
+
+<section xml:id="manual.ext.profile_mode.analysis.algorithms.sort" xreflabel="Sorting"><info><title>Sort Algorithm Performance</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_SORT</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Give measure of sort algorithm
+ performance based on actual input. For instance, advise Radix Sort over
+ Quick Sort for a particular call context.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ See papers:
+ <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>.
+ </para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>60%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis> Change sort algorithm
+ at site S from X Sort to Y Sort.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis> <code>sort</code>
+ algorithm.</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ Issue the advice if the cost model tells us that another sort algorithm
+ would do better on this input. Requires us to know what algorithm we
+ are using in our sort implementation in release mode.</para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Runtime(algo) for algo in [radix, quick, merge, ...]</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.analysis.locality" xreflabel="Data Locality"><info><title>Data Locality</title></info>
+
+
+ <para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_LOCALITY</code>.
+ </para>
+
+<section xml:id="manual.ext.profile_mode.analysis.locality.sw_prefetch" xreflabel="Need Software Prefetch"><info><title>Need Software Prefetch</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_SOFTWARE_PREFETCH</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Discover sequences of indirect
+ memory accesses that are not regular, thus cannot be predicted by
+ hardware prefetchers.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ Indirect references are hard to predict and are very expensive when they
+ miss in caches.</para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>25%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis> Insert prefetch
+ instruction.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis> Vector iterator and
+ access operator [].
+ </para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ First, get cache line size and page size from system.
+ Then record iterator dereference sequences for which the value is a pointer.
+ For each sequence within a container, issue a warning if successive pointer
+ addresses are not within cache lines and do not form a linear pattern
+ (otherwise they may be prefetched by hardware).
+ If they also step across page boundaries, make the warning stronger.
+ </para>
+ <para>The same analysis applies to containers other than vector.
+ However, we cannot give the same advice for linked structures, such as list,
+ as there is no random access to the n-th element. The user may still be
+ able to benefit from this information, for instance by employing frays (user
+ level light weight threads) to hide the latency of chasing pointers.
+ </para>
+ <para>
+ This analysis is a little oversimplified. A better cost model could be
+ created by understanding the capability of the hardware prefetcher.
+ This model could be trained automatically by running a set of synthetic
+ cases.
+ </para>
+ </listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Total distance between pointer values of successive elements in vectors
+ of pointers.</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 int zero = 0;
+2 vector&lt;int*&gt; v(10000000, &amp;zero);
+3 for (int k = 0; k &lt; 10000000; ++k) {
+4 v[random() % 10000000] = new int(k);
+5 }
+6 for (int j = 0; j &lt; 10000000; ++j) {
+7 count += (*v[j] == 0 ? 0 : 1);
+8 }
+
+foo.cc:7: advice: Insert prefetch instruction.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.locality.linked" xreflabel="Linked Structure Locality"><info><title>Linked Structure Locality</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Give measure of locality of
+ objects stored in linked structures (lists, red-black trees and hashtables)
+ with respect to their actual traversal patterns.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>Allocation can be tuned
+ to a specific traversal pattern, to result in better data locality.
+ See paper:
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.springerlink.com/content/8085744l00x72662/">
+ Custom Memory Allocation for Free</link>.
+ </para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>30%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis>
+ High scatter score N for container built at site S.
+ Consider changing allocation sequence or choosing a structure conscious
+ allocator.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis> Methods of all
+ containers using linked structures.</para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ First, get cache line size and page size from system.
+ Then record the number of successive elements that are on different line
+ or page, for each traversal method such as <code>find</code>. Give advice
+ only if the ratio between this number and the number of total node hops
+ is above a threshold.</para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Sum(same_cache_line(this,previous))</para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+ 1 set&lt;int&gt; s;
+ 2 for (int i = 0; i &lt; 10000000; ++i) {
+ 3 s.insert(i);
+ 4 }
+ 5 set&lt;int&gt; s1, s2;
+ 6 for (int i = 0; i &lt; 10000000; ++i) {
+ 7 s1.insert(i);
+ 8 s2.insert(i);
+ 9 }
+...
+ // Fast, better locality.
+10 for (set&lt;int&gt;::iterator it = s.begin(); it != s.end(); ++it) {
+11 sum += *it;
+12 }
+ // Slow, elements are further apart.
+13 for (set&lt;int&gt;::iterator it = s1.begin(); it != s1.end(); ++it) {
+14 sum += *it;
+15 }
+
+foo.cc:5: advice: High scatter score NNN for set built here. Consider changing
+the allocation sequence or switching to a structure conscious allocator.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.analysis.mthread" xreflabel="Multithreaded Data Access"><info><title>Multithreaded Data Access</title></info>
+
+
+ <para>
+ 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.
+ </para>
+
+ <para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_MULTITHREADED</code>.
+ </para>
+
+<section xml:id="manual.ext.profile_mode.analysis.mthread.ddtest" xreflabel="Dependence Violations at Container Level"><info><title>Data Dependence Violations at Container Level</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_DDTEST</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect container elements
+ that are referenced from multiple threads in the parallel region or
+ across parallel regions.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis>
+ Sharing data between threads requires communication and perhaps locking,
+ which may be expensive.
+ </para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>?%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis> Change data
+ distribution or parallel algorithm.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis> Container access methods
+ and iterators.
+ </para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ 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="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>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Number of accesses to elements referenced from multiple threads
+ </para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.mthread.false_share" xreflabel="False Sharing"><info><title>False Sharing</title></info>
+
+<itemizedlist>
+ <listitem><para><emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_FALSE_SHARING</code>.
+ </para></listitem>
+ <listitem><para><emphasis>Goal:</emphasis> Detect elements in the
+ same container which share a cache line, are written by at least one
+ thread, and accessed by different threads.
+ </para></listitem>
+ <listitem><para><emphasis>Fundamentals:</emphasis> Under these assumptions,
+ cache protocols require
+ communication to invalidate lines, which may be expensive.
+ </para></listitem>
+ <listitem><para><emphasis>Sample runtime reduction:</emphasis>68%.
+ </para></listitem>
+ <listitem><para><emphasis>Recommendation:</emphasis> Reorganize container
+ or use padding to avoid false sharing.</para></listitem>
+ <listitem><para><emphasis>To instrument:</emphasis> Container access methods
+ and iterators.
+ </para></listitem>
+ <listitem><para><emphasis>Analysis:</emphasis>
+ First, get the cache line size.
+ For each shared container, record all the associated iterator dereferences
+ and member access methods with the thread id. Compare the address lists
+ across threads to detect references in two different threads to the same
+ cache line. Issue a warning only if the ratio to total references is
+ significant. Do the same for iterator dereference values if they are
+ pointers.</para></listitem>
+ <listitem><para><emphasis>Cost model:</emphasis>
+ Number of accesses to same cache line from different threads.
+ </para></listitem>
+ <listitem><para><emphasis>Example:</emphasis>
+<programlisting>
+1 vector&lt;int&gt; v(2, 0);
+2 #pragma omp parallel for shared(v, SIZE) schedule(static, 1)
+3 for (i = 0; i &lt; SIZE; ++i) {
+4 v[i % 2] += i;
+5 }
+
+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.
+</programlisting>
+</para></listitem>
+</itemizedlist>
+</section>
+
+</section>
+
+
+<section xml:id="manual.ext.profile_mode.analysis.statistics" xreflabel="Statistics"><info><title>Statistics</title></info>
+
+
+<para>
+<emphasis>Switch:</emphasis>
+ <code>_GLIBCXX_PROFILE_STATISTICS</code>.
+</para>
+
+<para>
+ In some cases the cost model may not tell us anything because the costs
+ appear to offset the benefits. Consider the choice between a vector and
+ a list. When there are both inserts and iteration, an automatic advice
+ may not be issued. However, the programmer may still be able to make use
+ of this information in a different way.
+</para>
+<para>
+ 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.
+</para>
+
+</section>
+
+
+</section>
+
+
+<bibliography xml:id="profile_mode.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <citetitle>
+ Perflint: A Context Sensitive Performance Advisor for C++ Programs
+ </citetitle>
+
+ <author><personname><firstname>Lixia</firstname><surname>Liu</surname></personname></author>
+ <author><personname><firstname>Silvius</firstname><surname>Rus</surname></personname></author>
+
+ <copyright>
+ <year>2009</year>
+ <holder/>
+ </copyright>
+
+ <publisher>
+ <publishername>
+ Proceedings of the 2009 International Symposium on Code Generation
+ and Optimization
+ </publishername>
+ </publisher>
+ </biblioentry>
+</bibliography>
+
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/shared_ptr.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/shared_ptr.xml
new file mode 100644
index 000000000..a89c972f0
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/shared_ptr.xml
@@ -0,0 +1,484 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.util.memory.shared_ptr" xreflabel="shared_ptr">
+<?dbhtml filename="shared_ptr.html"?>
+
+<info><title>shared_ptr</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>shared_ptr</keyword>
+ </keywordset>
+</info>
+
+
+
+<para>
+The shared_ptr class template stores a pointer, usually obtained via new,
+and implements shared ownership semantics.
+</para>
+
+<section xml:id="shared_ptr.req"><info><title>Requirements</title></info>
+
+
+ <para>
+ </para>
+
+ <para>
+ The standard deliberately doesn't require a reference-counted
+ implementation, allowing other techniques such as a
+ circular-linked-list.
+ </para>
+
+ <para>
+ </para>
+</section>
+
+<section xml:id="shared_ptr.design_issues"><info><title>Design Issues</title></info>
+
+
+
+ <para>
+The <classname>shared_ptr</classname> 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
+the GCC implementation. Names have been uglified in this implementation,
+but the design should be recognisable to anyone familiar with the Boost
+1.32 shared_ptr.
+ </para>
+
+ <para>
+The basic design is an abstract base class, <code>_Sp_counted_base</code> that
+does the reference-counting and calls virtual functions when the count
+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.
+ </para>
+
+</section>
+
+<section xml:id="shared_ptr.impl"><info><title>Implementation</title></info>
+
+
+ <section><info><title>Class Hierarchy</title></info>
+
+
+ <para>
+A <classname>shared_ptr&lt;T&gt;</classname> contains a pointer of
+type <type>T*</type> and an object of type
+<classname>__shared_count</classname>. The shared_count contains a
+pointer of type <type>_Sp_counted_base*</type> which points to the
+object that maintains the reference-counts and destroys the managed
+resource.
+ </para>
+
+<variablelist>
+
+<varlistentry>
+ <term><classname>_Sp_counted_base&lt;Lp&gt;</classname></term>
+ <listitem>
+ <para>
+The base of the hierarchy is parameterized on the lock policy (see below.)
+_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>
+</varlistentry>
+
+<varlistentry>
+ <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 <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>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>
+</varlistentry>
+
+<varlistentry>
+ <term><classname>_Sp_counted_ptr&lt;Ptr, Lp&gt;</classname></term>
+ <listitem>
+ <para>
+Inherits from _Sp_counted_base and stores a pointer of type <type>Ptr</type>,
+which is passed to <function>delete</function> when the last reference is dropped.
+This is the simplest form and is used when there is no custom deleter or
+allocator.
+ </para>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term><classname>_Sp_counted_deleter&lt;Ptr, Deleter, Alloc&gt;</classname></term>
+ <listitem>
+ <para>
+Inherits from _Sp_counted_ptr and adds support for custom deleter and
+allocator. Empty Base Optimization is used for the allocator. This class
+is used even when the user only provides a custom deleter, in which case
+<classname>allocator</classname> is used as the allocator.
+ </para>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term><classname>_Sp_counted_ptr_inplace&lt;Tp, Alloc, Lp&gt;</classname></term>
+ <listitem>
+ <para>
+Used by <code>allocate_shared</code> and <code>make_shared</code>.
+Contains aligned storage to hold an object of type <type>Tp</type>,
+which is constructed in-place with placement <function>new</function>.
+Has a variadic template constructor allowing any number of arguments to
+be forwarded to <type>Tp</type>'s constructor.
+Unlike the other <classname>_Sp_counted_*</classname> 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.
+ </para>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+ <para>
+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++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://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
+instances are correct even when those instances share a reference count e.g.
+</para>
+
+<programlisting>
+shared_ptr&lt;A&gt; a(new A);
+shared_ptr&lt;A&gt; b(a);
+
+// Thread 1 // Thread 2
+ a.reset(); b.reset();
+</programlisting>
+
+<para>
+The dynamically-allocated object must be destroyed by exactly one of the
+threads. Weak references make things even more interesting.
+The shared state used to implement shared_ptr must be transparent to the
+user and invariants must be preserved at all times.
+The key pieces of shared state are the strong and weak reference counts.
+Updates to these need to be atomic and visible to all threads to ensure
+correct cleanup of the managed resource (which is, after all, shared_ptr's
+job!)
+On multi-processor systems memory synchronisation may be needed so that
+reference-count updates and the destruction of the managed resource are
+race-free.
+</para>
+
+<para>
+The function <function>_Sp_counted_base::_M_add_ref_lock()</function>, called when
+obtaining a shared_ptr from a weak_ptr, has to test if the managed
+resource still exists and either increment the reference count or throw
+<classname>bad_weak_ptr</classname>.
+In a multi-threaded program there is a potential race condition if the last
+reference is dropped (and the managed resource destroyed) between testing
+the reference count and incrementing it, which could result in a shared_ptr
+pointing to invalid memory.
+</para>
+<para>
+The Boost shared_ptr (as used in GCC) features a clever lock-free
+algorithm to avoid the race condition, but this relies on the
+processor supporting an atomic <emphasis>Compare-And-Swap</emphasis>
+instruction. For other platforms there are fall-backs using mutex
+locks. Boost (as of version 1.35) includes several different
+implementations and the preprocessor selects one based on the
+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.
+</para>
+
+ </section>
+
+ <section><info><title>Selecting Lock Policy</title></info>
+
+
+ <para>
+ </para>
+
+ <para>
+There is a single <classname>_Sp_counted_base</classname> class,
+which is a template parameterized on the enum
+<type>__gnu_cxx::_Lock_policy</type>. The entire family of classes is
+parameterized on the lock policy, right up to
+<classname>__shared_ptr</classname>, <classname>__weak_ptr</classname> and
+<classname>__enable_shared_from_this</classname>. The actual
+<classname>std::shared_ptr</classname> class inherits from
+<classname>__shared_ptr</classname> with the lock policy parameter
+selected automatically based on the thread model and platform that
+libstdc++ is configured for, so that the best available template
+specialization will be used. This design is necessary because it would
+not be conforming for <classname>shared_ptr</classname> to have an
+extra template parameter, even if it had a default value. The
+available policies are:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ <constant>_S_Atomic</constant>
+ </para>
+ <para>
+Selected when GCC supports a builtin atomic compare-and-swap operation
+on the target processor (see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html">Atomic
+Builtins</link>.) The reference counts are maintained using a lock-free
+algorithm and GCC's atomic builtins, which provide the required memory
+synchronisation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <constant>_S_Mutex</constant>
+ </para>
+ <para>
+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.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <constant>_S_Single</constant>
+ </para>
+ <para>
+This policy uses a non-reentrant add_ref_lock() with no locking. It is
+used when libstdc++ is built without <literal>--enable-threads</literal>.
+ </para>
+ </listitem>
+
+ </orderedlist>
+ <para>
+ For all three policies, reference count increments and
+ decrements are done via the functions in
+ <filename>ext/atomicity.h</filename>, 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.
+ </para>
+ </section>
+
+
+<section><info><title>Related functions and classes</title></info>
+
+
+<variablelist>
+
+<varlistentry>
+ <term><code>dynamic_pointer_cast</code>, <code>static_pointer_cast</code>,
+<code>const_pointer_cast</code></term>
+ <listitem>
+ <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++11 mode, so in TR1 mode these casts rely on three non-standard
+constructors in shared_ptr and __shared_ptr.
+In C++11 mode these constructors and the related tag types are not needed.
+ </para>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term><code>enable_shared_from_this</code></term>
+ <listitem>
+ <para>
+The clever overload to detect a base class of type
+<code>enable_shared_from_this</code> comes straight from Boost.
+There is an extra overload for <code>__enable_shared_from_this</code> to
+work smoothly with <code>__shared_ptr&lt;Tp, Lp&gt;</code> using any lock
+policy.
+ </para>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term><code>make_shared</code>, <code>allocate_shared</code></term>
+ <listitem>
+ <para>
+<code>make_shared</code> simply forwards to <code>allocate_shared</code>
+with <code>std::allocator</code> as the allocator.
+Although these functions can be implemented non-intrusively using the
+alias constructor, if they have access to the implementation then it is
+possible to save storage and reduce the number of heap allocations. The
+newly constructed object and the _Sp_counted_* can be allocated in a single
+block and the standard says implementations are "encouraged, but not required,"
+to do so. This implementation provides additional non-standard constructors
+(selected with the type <code>_Sp_make_shared_tag</code>) which create an
+object of type <code>_Sp_counted_ptr_inplace</code> to hold the new object.
+The returned <code>shared_ptr&lt;A&gt;</code> needs to know the address of the
+new <code>A</code> object embedded in the <code>_Sp_counted_ptr_inplace</code>,
+but it has no way to access it.
+This implementation uses a "covert channel" to return the address of the
+embedded object when <code>get_deleter&lt;_Sp_make_shared_tag&gt;()</code>
+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.
+ </para>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</section>
+
+</section>
+
+<section xml:id="shared_ptr.using"><info><title>Use</title></info>
+
+
+ <section><info><title>Examples</title></info>
+
+ <para>
+ Examples of use can be found in the testsuite, under
+ <filename class="directory">testsuite/tr1/2_general_utilities/shared_ptr</filename>,
+ <filename class="directory">testsuite/20_util/shared_ptr</filename>
+ and
+ <filename class="directory">testsuite/20_util/weak_ptr</filename>.
+ </para>
+ </section>
+
+ <section><info><title>Unresolved Issues</title></info>
+
+ <para>
+ The <emphasis><classname>shared_ptr</classname> atomic access</emphasis>
+ clause in the C++11 standard is not implemented in GCC.
+ </para>
+
+ <para>
+ The <type>_S_single</type> policy uses atomics when used in MT
+ code, because it uses the same dispatcher functions that check
+ <function>__gthread_active_p()</function>. This could be
+ addressed by providing template specialisations for some members
+ of <classname>_Sp_counted_base&lt;_S_single&gt;</classname>.
+ </para>
+
+ <para>
+ Unlike Boost, this implementation does not use separate classes
+ for the pointer+deleter and pointer+deleter+allocator cases in
+ 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,
+ the _Sp_counted_deleter and __shared_count constructors taking a
+ custom deleter but no allocator are technically redundant and
+ could be removed, changing callers to always specify an
+ allocator. If a separate pointer+deleter class was added the
+ __shared_count constructor would be needed, so it has been kept
+ for now.
+ </para>
+
+ <para>
+ The hack used to get the address of the managed object from
+ <function>_Sp_counted_ptr_inplace::_M_get_deleter()</function>
+ is accessible to users. This could be prevented if
+ <function>get_deleter&lt;_Sp_make_shared_tag&gt;()</function>
+ always returned NULL, since the hack only needs to work at a
+ lower level, not in the public API. This wouldn't be difficult,
+ but hasn't been done since there is no danger of accidental
+ misuse: users already know they are relying on unsupported
+ features if they refer to implementation details such as
+ _Sp_make_shared_tag.
+ </para>
+
+ <para>
+ tr1::_Sp_deleter could be a private member of tr1::__shared_count but it
+ would alter the ABI.
+ </para>
+
+ </section>
+
+</section>
+
+<section xml:id="shared_ptr.ack"><info><title>Acknowledgments</title></info>
+
+
+ <para>
+ 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.
+ </para>
+
+</section>
+
+<bibliography xml:id="shared_ptr.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <subtitle>
+ N2351
+ </subtitle>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <subtitle>
+ N2456
+ </subtitle>
+ </biblioentry>
+
+ <biblioentry>
+ <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++
+ </link>
+ </title>
+ <subtitle>
+ N2461
+ </subtitle>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <subtitle>
+ N2461
+ </subtitle>
+ </biblioentry>
+
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/spine.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/spine.xml
new file mode 100644
index 000000000..2585d00b8
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/spine.xml
@@ -0,0 +1,251 @@
+<book xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual" xreflabel="Manual">
+<?dbhtml dir="manual"?>
+<?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>
+ <year>2013</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>
+
+</info>
+
+<!-- Part 01 : Intro -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="intro.xml">
+</xi:include>
+
+<!-- Part 02 : Standard Contents -->
+<part xml:id="manual.std" xreflabel="Standard Contents">
+<info>
+ <title>
+ Standard Contents
+ </title>
+</info>
+<?dbhtml filename="std_contents.html"?>
+
+
+<!-- Chapter 01 : Support -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="support.xml">
+</xi:include>
+
+
+<!-- Chapter 02 : Diagnostics -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="diagnostics.xml">
+</xi:include>
+
+<!-- Chapter 03 : Utilities -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="utilities.xml">
+</xi:include>
+
+<!-- Chapter 04 : Strings -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="strings.xml">
+</xi:include>
+
+<!-- Chapter 05 : Localization -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="localization.xml">
+</xi:include>
+
+<!-- Chapter 06 : Containers -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="containers.xml">
+</xi:include>
+
+<!-- Chapter 07 : Iterators -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="iterators.xml">
+</xi:include>
+
+<!-- Chapter 08 : Algorithms -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="algorithms.xml">
+</xi:include>
+
+<!-- Chapter 09 : Numerics -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="numerics.xml">
+</xi:include>
+
+<!-- Chapter 10 : Input Output -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="io.xml">
+</xi:include>
+
+<!-- Chapter 11 : Atomics -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="atomics.xml">
+</xi:include>
+
+<!-- Chapter 12 : Concurrency -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="concurrency.xml">
+</xi:include>
+
+</part>
+
+<!-- Part 03 : Extensions -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="extensions.xml">
+</xi:include>
+
+
+<!-- Part 04 : Appendices -->
+<part xml:id="appendix" xreflabel="Appendices"><info><title>
+ Appendices
+</title></info>
+<?dbhtml filename="appendix.html"?>
+
+
+<!-- Appendix A -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="appendix_contributing.xml">
+</xi:include>
+
+<!-- Appendix B -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="appendix_porting.xml">
+</xi:include>
+
+<!-- Appendix C -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="appendix_free.xml">
+</xi:include>
+
+<!-- Appendix D -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="../gnu/gpl-3.0.xml">
+</xi:include>
+
+<!-- Appendix E -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="../gnu/fdl-1.3.xml">
+</xi:include>
+
+</part>
+
+</book>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxx1998.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxx1998.xml
new file mode 100644
index 000000000..1541343e0
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxx1998.xml
@@ -0,0 +1,1160 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="status.iso.1998" xreflabel="ISO C++ 1998">
+<?dbhtml filename="status_iso_cxx1998.html"?>
+
+<info><title>C++ 1998/2003</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>1998</keyword>
+ </keywordset>
+</info>
+
+
+<section xml:id="iso.1998.status" xreflabel="Implementation Status">
+<info><title>Implementation Status</title></info>
+
+<para>
+This status table is based on the table of contents of ISO/IEC 14882:2003.
+</para>
+
+<para>
+This page describes the C++ 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++ 1998/2003 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>Types</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.2</entry>
+ <entry>Implementation properties</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.2.1</entry>
+ <entry>Numeric Limits</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.2.1.1</entry>
+ <entry>Class template <code>numeric_limits</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.2.1.2</entry>
+ <entry><code>numeric_limits</code> members</entry>
+ <entry>Y</entry>
+ </row>
+ <row>
+ <entry>18.2.1.3</entry>
+ <entry><code>float_round_style</code></entry>
+ <entry>Y</entry>
+ </row>
+ <row>
+ <entry>18.2.1.4</entry>
+ <entry><code>float_denorm_style</code></entry>
+ <entry>Y</entry>
+ </row>
+ <row>
+ <entry>18.2.1.5</entry>
+ <entry><code>numeric_limits</code> specializations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.2.2</entry>
+ <entry>C Library</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.3</entry>
+ <entry>Start and termination</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.4</entry>
+ <entry>Dynamic memory management</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.5</entry>
+ <entry>Type identification</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.5.1</entry>
+ <entry>Class type_info</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.5.2</entry>
+ <entry>Class bad_cast</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.5.3</entry>
+ <entry>Class bad_typeid</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.6</entry>
+ <entry>Exception handling</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.6.1</entry>
+ <entry>Class exception</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.6.2</entry>
+ <entry>Violation exception-specifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.6.3</entry>
+ <entry>Abnormal termination</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.6.4</entry>
+ <entry><code>uncaught_exception</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>18.7</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>Exception classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.2</entry>
+ <entry>Assertions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>19.3</entry>
+ <entry>Error numbers</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>Requirements</entry>
+ <entry>Y</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><code>pair</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3</entry>
+ <entry>Function objects</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.1</entry>
+ <entry>Base</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.2</entry>
+ <entry>Arithmetic operation</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.3</entry>
+ <entry>Comparisons</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.4</entry>
+ <entry>Logical operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.5</entry>
+ <entry>Negators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.6</entry>
+ <entry>Binders</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.7</entry>
+ <entry>Adaptors for pointers to functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.3.8</entry>
+ <entry>Adaptors for pointers to members</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4</entry>
+ <entry>Memory</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.1</entry>
+ <entry>The default allocator</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.2</entry>
+ <entry>Raw storage iterator</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.3</entry>
+ <entry>Temporary buffers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.4</entry>
+ <entry>Specialized algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.4.1</entry>
+ <entry><code>uninitialized_copy</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.4.2</entry>
+ <entry><code>uninitialized_fill</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.4.3</entry>
+ <entry><code>uninitialized_fill_n</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.5</entry>
+ <entry>Class template <code>auto_ptr</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.4.6</entry>
+ <entry>C library</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>Character traits</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.1.1</entry>
+ <entry>Character traits requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.1.2</entry>
+ <entry>traits typedef</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.1.3</entry>
+ <entry><code>char_traits</code> specializations</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.1.3.1</entry>
+ <entry>struct <code>char_traits&lt;char&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.1.3.2</entry>
+ <entry>struct <code>char_traits&lt;wchar_t&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.2</entry>
+ <entry>String classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.3</entry>
+ <entry>Class template <code>basic_string</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.4</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>Locales</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.1.1</entry>
+ <entry>Class <code>locale</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.1.2</entry>
+ <entry><code>locale</code> globals</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.1.3</entry>
+ <entry>Convenience interfaces</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.1.3.1</entry>
+ <entry>Character classification</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.1.3.2</entry>
+ <entry>Character conversions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2</entry>
+ <entry>Standard locale categories</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.1</entry>
+ <entry><code>ctype</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.2</entry>
+ <entry>Numeric</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.2.1</entry>
+ <entry><code>num_get</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.2.2</entry>
+ <entry><code>num_put</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.3</entry>
+ <entry><code>num_punct</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.4</entry>
+ <entry><code>collate</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.5</entry>
+ <entry>Time</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.5.1</entry>
+ <entry><code>time_get</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.5.2</entry>
+ <entry><code>time_get_byname</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.5.3</entry>
+ <entry><code>time_put</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.5.3</entry>
+ <entry><code>time_put_byname</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.6</entry>
+ <entry>Monetary</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.6.1</entry>
+ <entry><code>money_get</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.6.2</entry>
+ <entry><code>money_put</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.6.3</entry>
+ <entry><code>money_punct</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.6.4</entry>
+ <entry><code>money_punct_byname</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.7</entry>
+ <entry><code>messages</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.2.8</entry>
+ <entry>Program-defined facets</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>22.3</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>Container requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2</entry>
+ <entry>Sequence containers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.1</entry>
+ <entry>Class template <code>deque</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.2</entry>
+ <entry>Class template <code>list</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.3</entry>
+ <entry>Adaptors</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.3.1</entry>
+ <entry>Class template <code>queue</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.3.2</entry>
+ <entry>Class template <code>priority_queue</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.3.3</entry>
+ <entry>Class template <code>stack</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.4</entry>
+ <entry>Class template <code>vector</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.5</entry>
+ <entry>Class <code>vector&lt;bool&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3</entry>
+ <entry>Associative containers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.1</entry>
+ <entry>Class template <code>map</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.2</entry>
+ <entry>Class template <code>multimap</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.3</entry>
+ <entry>Class template <code>set</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.3.4</entry>
+ <entry>Class template <code>multiset</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>Requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.2</entry>
+ <entry>Header <code>&lt;iterator&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.3</entry>
+ <entry>Iterator primitives</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.4</entry>
+ <entry>Predefined iterators and Iterator adaptors</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.4.1</entry>
+ <entry>Reverse iterators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.4.2</entry>
+ <entry>Insert iterators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5</entry>
+ <entry>Stream iterators</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5.1</entry>
+ <entry>Class template <code>istream_iterator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5.2</entry>
+ <entry>Class template <code>ostream_iterator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5.3</entry>
+ <entry>Class template <code>istreambuf_iterator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>24.5.4</entry>
+ <entry>Class template <code>ostreambuf_iterator</code></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>Non-modifying sequence operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>25.2</entry>
+ <entry>Mutating sequence operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>25.3</entry>
+ <entry>Sorting and related operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>25.4</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>Numeric type requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.2</entry>
+ <entry>Complex numbers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3</entry>
+ <entry>Numeric arrays</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.1</entry>
+ <entry>Header <code>&lt;valarray&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.2</entry>
+ <entry>Class template <code>valarray</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.3</entry>
+ <entry><code>valarray</code> non-member operations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.4</entry>
+ <entry>Class <code>slice</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.5</entry>
+ <entry>Class template <code>slice_array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.6</entry>
+ <entry>Class <code>gslice</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.7</entry>
+ <entry>Class template <code>gslice_array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.8</entry>
+ <entry>Class template <code>mask_array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.3.9</entry>
+ <entry>Class template <code>indirect_array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.4</entry>
+ <entry>Generalized numeric operations</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.4.1</entry>
+ <entry><code>accumulate</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.4.2</entry>
+ <entry><code>inner_product</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.4.3</entry>
+ <entry><code>partial_sum</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.4.4</entry>
+ <entry><code>adjacent_difference</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.4.5</entry>
+ <entry>iota</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>26.5</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</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>27.1</entry>
+ <entry>Requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.2</entry>
+ <entry>Forward declarations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.3</entry>
+ <entry>Standard iostream objects</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.3.1</entry>
+ <entry>Narrow stream objects</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.3.2</entry>
+ <entry>Wide stream objects</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.4</entry>
+ <entry>Iostreams base classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.5</entry>
+ <entry>Stream buffers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.6</entry>
+ <entry>Formatting and manipulators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.7</entry>
+ <entry>String-based streams</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>27.8</entry>
+ <entry>File-based streams</entry>
+ <entry>Y</entry>
+ <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 bool operand</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.2</entry>
+ <entry><code>static</code> keyword</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.3</entry>
+ <entry>Access declarations</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>D.4</entry>
+ <entry>Implicit conversion from const strings</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>char* streams</entry>
+ <entry/>
+ <entry/>
+ </row>
+
+ </tbody>
+</tgroup>
+</table>
+</section>
+
+<section xml:id="iso.1998.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
+
+
+ <para>
+ The ISO standard defines the following phrase:
+ </para>
+ <blockquote>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <code>[1.3.5] implementation-defined behavior</code>
+ </term>
+ <listitem>
+ <para>
+ Behavior, for a well-formed program construct and correct data, that
+ depends on the implementation <emphasis>and that each implementation
+ shall document</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </blockquote>
+ <para>
+ We do so here, for the C++ library only. Behavior of the
+ compiler, linker, runtime loader, and other elements of "the
+ implementation" are documented elsewhere. Everything listed
+ in Annex B, Implementation Qualities, are also part of the
+ compiler, not the library.
+ </para>
+ <para>
+ For each entry, we give the section number of the standard, when
+ applicable. This list is probably incomplet and inkorrekt.
+ </para>
+ <para>
+ <emphasis>[1.9]/11 #3</emphasis> If <code>isatty(3)</code> is true, then
+ interactive stream support is implied.
+ </para>
+ <para>
+ <emphasis>[17.4.4.5]</emphasis> Non-reentrant functions are probably best
+ discussed in the various sections on multithreading (see above).
+ </para>
+ <!-- [17.4.4.8]/3 says any function that doesn't have an exception-spec
+ can throw whatever we want; see also its footnote. Let's list those
+ in the sections where the function itself occurs.
+ -->
+ <para><emphasis>[18.1]/4</emphasis> The type of <code>NULL</code> is described
+ <link linkend="std.support.types.null">here</link>.
+ </para>
+ <para><emphasis>[18.3]/8</emphasis> Even though it's listed in the library
+ sections, libstdc++ has zero control over what the cleanup code hands
+ back to the runtime loader. Talk to the compiler people. :-)
+ </para>
+ <para><emphasis>[18.4.2.1]/5</emphasis> (bad_alloc),
+ <emphasis>[18.5.2]/5</emphasis> (bad_cast),
+ <emphasis>[18.5.3]/5</emphasis> (bad_typeid),
+ <emphasis>[18.6.1]/8</emphasis> (exception),
+ <emphasis>[18.6.2.1]/5</emphasis> (bad_exception): The <code>what()</code>
+ member function of class <code>std::exception</code>, and these other
+ classes publicly derived from it, simply returns the name of the
+ class. But they are the <emphasis>mangled</emphasis> names; you will need to call
+ <code>c++filt</code> and pass the names as command-line parameters to
+ demangle them, or call a
+ <link linkend="manual.ext.demangle">runtime demangler function</link>.
+ (The classes in <code>&lt;stdexcept&gt;</code> have constructors which
+ require an argument to use later for <code>what()</code> calls, so the
+ problem of <code>what()</code>'s value does not arise in most
+ user-defined exceptions.)
+ </para>
+ <para><emphasis>[18.5.1]/7</emphasis> The return value of
+ <code>std::type_info::name()</code> is the mangled type name (see the
+ previous entry for more).
+ </para>
+ <para><emphasis>[20.1.5]/5</emphasis> <emphasis>"Implementors are encouraged to
+ supply libraries that can accept allocators that encapsulate more
+ general memory models and that support non-equal instances. In such
+ implementations, any requirements imposed on allocators by containers
+ beyond those requirements that appear in Table 32, and the semantics
+ of containers and algorithms when allocator instances compare
+ non-equal, are implementation-defined."</emphasis> As yet we don't
+ have any allocators which compare non-equal, so we can't describe how
+ they behave.
+ </para>
+ <para><emphasis>[21.1.3.1]/3,4</emphasis>,
+ <emphasis>[21.1.3.2]/2</emphasis>,
+ <emphasis>[23.*]'s foo::iterator</emphasis>,
+ <emphasis>[27.*]'s foo::*_type</emphasis>,
+ <emphasis>others...</emphasis>
+ Nope, these types are called implementation-defined because you
+ shouldn't be taking advantage of their underlying types. Listing them
+ here would defeat the purpose. :-)
+ </para>
+ <para><emphasis>[21.1.3.1]/5</emphasis> I don't really know about
+ the mbstate_t stuff... see
+ the <link linkend="std.localization.facet.codecvt">chapter 22
+ notes</link> for what does exist.
+ </para>
+ <para><emphasis>[22.*]</emphasis> Anything and everything we have on locale
+ implementation will be described
+ <link linkend="std.localization.locales.locale">over here</link>.
+ </para>
+ <para><emphasis>[26.2.8]/9</emphasis> I have no idea what
+ <code>complex&lt;T&gt;</code>'s pow(0,0) returns.
+ </para>
+ <para><emphasis>[27.4.2.4]/2</emphasis> Calling
+ <code>std::ios_base::sync_with_stdio</code> after I/O has already been
+ performed on the standard stream objects will
+ flush the buffers, and <!-- this line might go away -->
+ destroy and recreate the underlying buffer instances. Whether or not
+ the previously-written I/O is destroyed in this process depends mostly
+ on the --enable-libio choice: for stdio, if the written data is
+ already in the stdio buffer, the data may be completely safe!
+ </para>
+ <para><emphasis>[27.6.1.1.2]</emphasis>,
+ <emphasis>[27.6.2.3]</emphasis> The I/O sentry ctor and dtor can perform
+ additional work than the minimum required. We are not currently taking
+ advantage of this yet.
+ </para>
+ <para><emphasis>[27.7.1.3]/16</emphasis>,
+ <emphasis>[27.8.1.4]/10</emphasis>
+ The effects of <code>pubsetbuf/setbuf</code> are described
+ <link linkend="std.io">in this chapter</link>.
+ </para>
+ <para><emphasis>[27.8.1.4]/16</emphasis> Calling <code>fstream::sync</code> when
+ a get area exists will... whatever <code>fflush()</code> does, I think.
+ </para>
+
+</section>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxx2011.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
new file mode 100644
index 000000000..8b781c069
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
@@ -0,0 +1,2697 @@
+<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>__cplusplus</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>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>19.2</entry>
+ <entry>Exception classes</entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>const char*</code> constructors.</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>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>19.5.5</entry>
+ <entry>Class <code>system_error</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>const char*</code> constructors.</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>
+ <entry>20.8.10</entry>
+ <entry>Function template <code>mem_fn</code></entry>
+ <entry>Y</entry>
+ <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_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
+ </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>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.9.7.6</entry>
+ <entry>Other transformations</entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>aligned_union</code>.</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>OUTERMOST is not recursive.</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>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>22.4.1</entry>
+ <entry>The <code>ctype</code> category</entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>codecvt&lt;char16_t></code> and
+ <code>codecvt&lt;char32_t></code></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> and <code>forward_list</code>
+ meet 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>
+ <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>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>23.3.3</entry>
+ <entry>Class template <code>deque</code></entry>
+ <entry>Partial</entry>
+ <entry><code>insert</code> and <code>erase</code> members do not
+ take <code>const_iterator</code> arguments (N2350).</entry>
+ </row>
+ <row>
+ <entry>23.3.4</entry>
+ <entry>Class template <code>forward_list</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>23.3.5</entry>
+ <entry>Class template <code>list</code></entry>
+ <entry>Partial</entry>
+ <entry><code>insert</code> and <code>erase</code> members do not
+ take <code>const_iterator</code> arguments (N2350).</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>23.3.6</entry>
+ <entry>Class template <code>vector</code></entry>
+ <entry>Partial</entry>
+ <entry><code>insert</code> and <code>erase</code> members do not
+ take <code>const_iterator</code> arguments (N2350).</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>23.3.7</entry>
+ <entry>Class <code>vector&lt;bool&gt;</code></entry>
+ <entry>Partial</entry>
+ <entry><code>insert</code> and <code>erase</code> members do not
+ take <code>const_iterator</code> arguments (N2350).</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
+ Missing <code>get_time</code> and <code>put_time</code> manipulators.
+ </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>
+ <entry>29.8</entry>
+ <entry>Fences</entry>
+ <entry>Y</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>23.5.4.2 [unord.map.cnstr]</emphasis>,
+ <emphasis>23.5.5.2 [unord.multimap.cnstr]</emphasis>,
+ <emphasis>23.5.6.2 [unord.set.cnstr]</emphasis>,
+ <emphasis>23.5.7.2 [unord.multiset.cnstr]</emphasis>
+ The default bucket count is 10 for the default constructors
+ and 0 for the range constructors and initializer-list constructors.
+ </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/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
new file mode 100644
index 000000000..3664f3017
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
@@ -0,0 +1,1794 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="status.iso.tr1" xreflabel="Status C++ TR1">
+<?dbhtml filename="status_iso_cxxtr1.html"?>
+
+<info><title>C++ TR1</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>tr1</keyword>
+ </keywordset>
+</info>
+
+<para>
+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
+</para>
+
+<para>
+In this implementation the header names are prefixed by
+<code>tr1/</code>, for instance <code>&lt;tr1/functional&gt;</code>,
+<code>&lt;tr1/memory&gt;</code>, and so on.
+</para>
+
+<para>
+This page describes the TR1 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++ TR1 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>2</emphasis></entry>
+ <entry namest="c2" nameend="c4" align="left"><emphasis>General Utilities</emphasis></entry>
+ </row>
+ <row>
+ <entry>2.1</entry>
+ <entry>Reference wrappers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.1.1</entry>
+ <entry>Additions to header <code>&lt;functional&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.1.2</entry>
+ <entry>Class template <code>reference_wrapper</code></entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.1.2.1</entry>
+ <entry><code>reference_wrapper</code> construct/copy/destroy</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.1.2.2</entry>
+ <entry><code>reference_wrapper</code> assignment</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.1.2.3</entry>
+ <entry><code>reference_wrapper</code> access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.1.2.4</entry>
+ <entry><code>reference_wrapper</code> invocation</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.1.2.5</entry>
+ <entry><code>reference_wrapper</code> helper functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2</entry>
+ <entry>Smart pointers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.1</entry>
+ <entry>Additions to header <code>&lt;memory&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.2</entry>
+ <entry>Class <code>bad_weak_ptr</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3</entry>
+ <entry>Class template <code>shared_ptr</code></entry>
+ <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>2.2.3.1</entry>
+ <entry><code>shared_ptr</code> constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.2</entry>
+ <entry><code>shared_ptr</code> destructor</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.3</entry>
+ <entry><code>shared_ptr</code> assignment</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.4</entry>
+ <entry><code>shared_ptr</code> modifiers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.5</entry>
+ <entry><code>shared_ptr</code> observers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.6</entry>
+ <entry><code>shared_ptr</code> comparison</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.7</entry>
+ <entry><code>shared_ptr</code> I/O</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.8</entry>
+ <entry><code>shared_ptr</code> specialized algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.9</entry>
+ <entry><code>shared_ptr</code> casts</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.3.10</entry>
+ <entry><code>get_deleter</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.4</entry>
+ <entry>Class template <code>weak_ptr</code></entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.4.1</entry>
+ <entry><code>weak_ptr</code> constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.4.2</entry>
+ <entry><code>weak_ptr</code> destructor</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.4.3</entry>
+ <entry><code>weak_ptr</code> assignment</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.4.4</entry>
+ <entry><code>weak_ptr</code> modifiers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.4.5</entry>
+ <entry><code>weak_ptr</code> observers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.4.6</entry>
+ <entry><code>weak_ptr</code> comparison</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.4.7</entry>
+ <entry><code>weak_ptr</code> specialized algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>2.2.5</entry>
+ <entry>Class template <code>enable_shared_from_this</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry><emphasis>3</emphasis></entry>
+ <entry namest="c2" nameend="c4" align="left"><emphasis>Function Objects</emphasis></entry>
+ </row>
+ <row>
+ <entry>3.1</entry>
+ <entry>Definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.2</entry>
+ <entry>Additions to <code>&lt;functional&gt; synopsis</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.3</entry>
+ <entry>Requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.4</entry>
+ <entry>Function return types</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.5</entry>
+ <entry>Function template <code>mem_fn</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.6</entry>
+ <entry>Function object binders</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.6.1</entry>
+ <entry>Class template <code>is_bind_expression</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.6.2</entry>
+ <entry>Class template <code>is_placeholder</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.6.3</entry>
+ <entry>Function template <code>bind</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.6.4</entry>
+ <entry>Placeholders</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7</entry>
+ <entry>Polymorphic function wrappers</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.1</entry>
+ <entry>Class <code>bad_function_call</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.1.1</entry>
+ <entry><code>bad_function_call</code> constructor</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2</entry>
+ <entry>Class template <code>function</code></entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2.1</entry>
+ <entry><code>function</code> construct/copy/destroy</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2.2</entry>
+ <entry><code>function</code> modifiers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2.3</entry>
+ <entry><code>function</code> capacity</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2.4</entry>
+ <entry><code>function</code> invocation</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2.5</entry>
+ <entry><code>function</code> target access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2.6</entry>
+ <entry>undefined operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2.7</entry>
+ <entry>null pointer comparison operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.7.2.8</entry>
+ <entry>specialized algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry><emphasis>4</emphasis></entry>
+ <entry namest="c2" nameend="c4" align="left"><emphasis>Metaprogramming and type traits</emphasis></entry>
+ </row>
+ <row>
+ <entry>4.1</entry>
+ <entry>Requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.2</entry>
+ <entry>Header <code>&lt;type_traits&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.3</entry>
+ <entry>Helper classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.4</entry>
+ <entry>General Requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.5</entry>
+ <entry>Unary Type Traits</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.5.1</entry>
+ <entry>Primary Type Categories</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.5.2</entry>
+ <entry>Composite type traits</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.5.3</entry>
+ <entry>Type properties</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.6</entry>
+ <entry>Relationships between types</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.7</entry>
+ <entry>Transformations between types</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.7.1</entry>
+ <entry>Const-volatile modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.7.2</entry>
+ <entry>Reference modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.7.3</entry>
+ <entry>Array modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.7.4</entry>
+ <entry>Pointer modifications</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.8</entry>
+ <entry>Other transformations</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>4.9</entry>
+ <entry>Implementation requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry><emphasis>5</emphasis></entry>
+ <entry namest="c2" nameend="c4" align="left"><emphasis>Numerical Facilities</emphasis></entry>
+ </row>
+ <row>
+ <entry>5.1</entry>
+ <entry>Random number generation</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.1</entry>
+ <entry>Requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.2</entry>
+ <entry>Header <code>&lt;random&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.3</entry>
+ <entry>Class template <code>variate_generator</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.4</entry>
+ <entry>Random number engine class templates</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.4.1</entry>
+ <entry>Class template <code>linear_congruential</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.4.2</entry>
+ <entry>Class template <code>mersenne_twister</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.4.3</entry>
+ <entry>Class template <code>subtract_with_carry</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.4.4</entry>
+ <entry>Class template <code>subtract_with_carry_01</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.4.5</entry>
+ <entry>Class template <code>discard_block</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.4.6</entry>
+ <entry>Class template <code>xor_combine</code></entry>
+ <entry>Y</entry>
+ <entry>operator()() per N2079</entry>
+ </row>
+ <row>
+ <entry>5.1.5</entry>
+ <entry>Engines with predefined parameters</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.6</entry>
+ <entry>Class <code>random_device</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7</entry>
+ <entry>Random distribution class templates</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.1</entry>
+ <entry>Class template <code>uniform_int</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.2</entry>
+ <entry>Class <code>bernoulli_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.3</entry>
+ <entry>Class template <code>geometric_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.4</entry>
+ <entry>Class template <code>poisson_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.5</entry>
+ <entry>Class template <code>binomial_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.6</entry>
+ <entry>Class template <code>uniform_real</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.7</entry>
+ <entry>Class template <code>exponential_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.8</entry>
+ <entry>Class template <code>normal_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.1.7.9</entry>
+ <entry>Class template <code>gamma_distribution</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2</entry>
+ <entry>Mathematical special functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1</entry>
+ <entry>Additions to header <code>&lt;cmath&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.1</entry>
+ <entry>associated Laguerre polynomials</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.2</entry>
+ <entry>associated Legendre functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.3</entry>
+ <entry>beta function</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.4</entry>
+ <entry>(complete) elliptic integral of the first kind</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.5</entry>
+ <entry>(complete) elliptic integral of the second kind</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.6</entry>
+ <entry>(complete) elliptic integral of the third kind</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.7</entry>
+ <entry>confluent hypergeometric functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.8</entry>
+ <entry>regular modified cylindrical Bessel functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.9</entry>
+ <entry>cylindrical Bessel functions (of the first kind)</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.10</entry>
+ <entry>irregular modified cylindrical Bessel functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.11</entry>
+ <entry>cylindrical Neumann functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.12</entry>
+ <entry>(incomplete) elliptic integral of the first kind</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.13</entry>
+ <entry>(incomplete) elliptic integral of the second kind</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.14</entry>
+ <entry>(incomplete) elliptic integral of the third kind</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.15</entry>
+ <entry>exponential integral</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.16</entry>
+ <entry>Hermite polynomials</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.17</entry>
+ <entry>hypergeometric functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.18</entry>
+ <entry>Laguerre polynomials</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.19</entry>
+ <entry>Legendre polynomials</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.20</entry>
+ <entry>Riemann zeta function</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.21</entry>
+ <entry>spherical Bessel functions (of the first kind)</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.22</entry>
+ <entry>spherical associated Legendre functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.1.23</entry>
+ <entry>spherical Neumann functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>5.2.2</entry>
+ <entry>Additions to header <code>&lt;math.h&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry><emphasis>6</emphasis></entry>
+ <entry namest="c2" nameend="c4" align="left"><emphasis>Containers</emphasis></entry>
+ </row>
+ <row>
+ <entry>6.1</entry>
+ <entry>Tuple types</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.1</entry>
+ <entry>Header <code>&lt;tuple&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.2</entry>
+ <entry>Additions to header <code>&lt;utility&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.3</entry>
+ <entry>Class template <code>tuple</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.3.1</entry>
+ <entry>Construction</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.3.2</entry>
+ <entry>Tuple creation functions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.3.3</entry>
+ <entry>Tuple helper classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.3.4</entry>
+ <entry>Element access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.3.5</entry>
+ <entry>Relational operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.1.4</entry>
+ <entry>Pairs</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.2</entry>
+ <entry>Fixed size array</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.2.1</entry>
+ <entry>Header <code>&lt;array&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.2.2</entry>
+ <entry>Class template <code>array</code></entry>
+ <entry>Y</entry>
+
+ <entry/>
+ </row>
+ <row>
+ <entry>6.2.2.1</entry>
+ <entry><code>array</code> constructors, copy, and assignment</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.2.2.2</entry>
+ <entry><code>array</code> specialized algorithms</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.2.2.3</entry>
+ <entry><code>array</code> size</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.2.2.4</entry>
+ <entry>Zero sized <code>array</code>s</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.2.2.5</entry>
+ <entry>Tuple interface to class template <code>array</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3</entry>
+ <entry>Unordered associative containers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.1</entry>
+ <entry>Unordered associative container requirements</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.1.1</entry>
+ <entry>Exception safety guarantees</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.2</entry>
+ <entry>Additions to header <code>&lt;functional&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.3</entry>
+ <entry>Class template <code>hash</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4</entry>
+ <entry>Unordered associative container classes</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.1</entry>
+ <entry>Header <code>&lt;unordered_set&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.2</entry>
+ <entry>Header <code>&lt;unordered_map&gt;</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.3</entry>
+ <entry>Class template <code>unordered_set</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.3.1</entry>
+ <entry><code>unordered_set</code> constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.3.2</entry>
+ <entry><code>unordered_set</code> swap</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.4</entry>
+ <entry>Class template <code>unordered_map</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.4.1</entry>
+ <entry><code>unordered_map</code> constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.4.2</entry>
+ <entry><code>unordered_map</code> element access</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.4.3</entry>
+ <entry><code>unordered_map</code> swap</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.5</entry>
+ <entry>Class template <code>unordered_multiset</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.5.1</entry>
+ <entry><code>unordered_multiset</code> constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.5.2</entry>
+ <entry><code>unordered_multiset</code> swap</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.6</entry>
+ <entry>Class template <code>unordered_multimap</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.6.1</entry>
+ <entry><code>unordered_multimap</code> constructors</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>6.3.4.6.2</entry>
+ <entry><code>unordered_multimap</code> swap</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry><emphasis>7</emphasis></entry>
+ <entry namest="c2" nameend="c4" align="left"><emphasis>Regular Expressions</emphasis></entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.1</entry>
+ <entry>Definitions</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.2</entry>
+ <entry>Requirements</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.3</entry>
+ <entry>Regular expressions summary</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.4</entry>
+ <entry>Header <code>&lt;regex&gt;</code> synopsis</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.5</entry>
+ <entry>Namespace <code>tr1::regex_constants</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.5.1</entry>
+ <entry>Bitmask Type <code>syntax_option_type</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.5.2</entry>
+ <entry>Bitmask Type <code>regex_constants::match_flag_type</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.5.3</entry>
+ <entry>Implementation defined <code>error_type</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.6</entry>
+ <entry>Class <code>regex_error</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.7</entry>
+ <entry>Class template <code>regex_traits</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8</entry>
+ <entry>Class template <code>basic_regex</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8.1</entry>
+ <entry><code>basic_regex</code> constants</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8.2</entry>
+ <entry><code>basic_regex</code> constructors</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8.3</entry>
+ <entry><code>basic_regex</code> assign</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8.4</entry>
+ <entry><code>basic_regex</code> constant operations</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8.5</entry>
+ <entry><code>basic_regex</code> locale</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8.6</entry>
+ <entry><code>basic_regex</code> swap</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8.7</entry>
+ <entry><code>basic_regex</code> non-member functions</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.8.7.1</entry>
+ <entry><code>basic_regex</code> non-member swap</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.9</entry>
+ <entry>Class template <code>sub_match</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.9.1</entry>
+ <entry><code>sub_match</code> members</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.9.2</entry>
+ <entry><code>sub_match</code> non-member operators</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.10</entry>
+ <entry>Class template <code>match_results</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.10.1</entry>
+ <entry><code>match_results</code> constructors</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.10.2</entry>
+ <entry><code>match_results</code> size</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.10.3</entry>
+ <entry><code>match_results</code> element access</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.10.4</entry>
+ <entry><code>match_results</code> formatting</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.10.5</entry>
+ <entry><code>match_results</code> allocator</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.10.6</entry>
+ <entry><code>match_results</code> swap</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.11</entry>
+ <entry>Regular expression algorithms</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.11.1</entry>
+ <entry>exceptions</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.11.2</entry>
+ <entry><code>regex_match</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.11.3</entry>
+ <entry><code>regex_search</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.11.4</entry>
+ <entry><code>regex_replace</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12</entry>
+ <entry>Regular expression Iterators</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.1</entry>
+ <entry>Class template <code>regex_iterator</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.1.1</entry>
+ <entry><code>regex_iterator</code> constructors</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.1.2</entry>
+ <entry><code>regex_iterator</code> comparisons</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.1.3</entry>
+ <entry><code>regex_iterator</code> dereference</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.1.4</entry>
+ <entry><code>regex_iterator</code> increment</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.2</entry>
+ <entry>Class template <code>regex_token_iterator</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.2.1</entry>
+ <entry><code>regex_token_iterator</code> constructors</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.2.2</entry>
+ <entry><code>regex_token_iterator</code> comparisons</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.2.3</entry>
+ <entry><code>regex_token_iterator</code> dereference</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.12.2.4</entry>
+ <entry><code>regex_token_iterator</code> increment</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>7.13</entry>
+ <entry>Modified ECMAScript regular expression grammar</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry><emphasis>8</emphasis></entry>
+ <entry namest="c2" nameend="c4" align="left"><emphasis>C Compatibility</emphasis></entry>
+ </row>
+ <row>
+ <entry>8.1</entry>
+ <entry>Additions to header <code>&lt;complex&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.2</entry>
+ <entry>Function <code>acos</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.3</entry>
+ <entry>Function <code>asin</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.4</entry>
+ <entry>Function <code>atan</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.5</entry>
+ <entry>Function <code>acosh</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.6</entry>
+ <entry>Function <code>asinh</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.7</entry>
+ <entry>Function <code>atanh</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.8</entry>
+ <entry>Function <code>fabs</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.1.9</entry>
+ <entry>Additional Overloads</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>8.2</entry>
+ <entry>Header <code>&lt;ccomplex&gt;</code></entry>
+ <entry>N</entry>
+ <entry>DR 551</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>8.3</entry>
+ <entry>Header <code>&lt;complex.h&gt;</code></entry>
+ <entry>N</entry>
+ <entry>DR 551</entry>
+ </row>
+ <row>
+ <entry>8.4</entry>
+ <entry>Additions to header <code>&lt;cctype&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.4.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.4.2</entry>
+ <entry>Function <code>isblank</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.5</entry>
+ <entry>Additions to header <code>&lt;ctype.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.6</entry>
+ <entry>Header <code>&lt;cfenv&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.6.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.6.2</entry>
+ <entry>Definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.7</entry>
+ <entry>Header <code>&lt;fenv.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.8</entry>
+ <entry>Additions to header <code>&lt;cfloat&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.9</entry>
+ <entry>Additions to header <code>&lt;float.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>8.10</entry>
+ <entry>Additions to header <code>&lt;ios&gt;</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>8.10.1</entry>
+ <entry>Synopsis</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>8.10.2</entry>
+ <entry>Function <code>hexfloat</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.11</entry>
+ <entry>Header <code>&lt;cinttypes&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.11.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry>DR 557</entry>
+ </row>
+ <row>
+ <entry>8.11.2</entry>
+ <entry>Definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.12</entry>
+ <entry>Header <code>&lt;inttypes.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.13</entry>
+ <entry>Additions to header <code>&lt;climits&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.14</entry>
+ <entry>Additions to header <code>&lt;limits.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>8.15</entry>
+ <entry>Additions to header <code>&lt;locale&gt;</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.16</entry>
+ <entry>Additions to header <code>&lt;cmath&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.16.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.16.2</entry>
+ <entry>Definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.16.3</entry>
+ <entry>Function template definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.16.4</entry>
+ <entry>Additional overloads</entry>
+ <entry>Y</entry>
+ <entry>DR 568; DR 550</entry>
+ </row>
+ <row>
+ <entry>8.17</entry>
+ <entry>Additions to header <code>&lt;math.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.18</entry>
+ <entry>Additions to header <code>&lt;cstdarg&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.19</entry>
+ <entry>Additions to header <code>&lt;stdarg.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.20</entry>
+ <entry>The header <code>&lt;cstdbool&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.21</entry>
+ <entry>The header <code>&lt;stdbool.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.22</entry>
+ <entry>The header <code>&lt;cstdint&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.22.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.22.2</entry>
+ <entry>Definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.23</entry>
+ <entry>The header <code>&lt;stdint.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.24</entry>
+ <entry>Additions to header <code>&lt;cstdio&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.24.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.24.2</entry>
+ <entry>Definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.24.3</entry>
+ <entry>Additional format specifiers</entry>
+ <entry>Y</entry>
+ <entry>C library dependency</entry>
+ </row>
+ <row>
+ <entry>8.24.4</entry>
+ <entry>Additions to header <code>&lt;stdio.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.25</entry>
+ <entry>Additions to header <code>&lt;cstdlib&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.25.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.25.2</entry>
+ <entry>Definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.25.3</entry>
+ <entry>Function <code>abs</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.25.4</entry>
+ <entry>Function <code>div</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.26</entry>
+ <entry>Additions to header <code>&lt;stdlib.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.27</entry>
+ <entry>Header <code>&lt;ctgmath&gt;</code></entry>
+ <entry>Y</entry>
+ <entry>DR 551</entry>
+ </row>
+ <row>
+ <entry>8.28</entry>
+ <entry>Header <code>&lt;tgmath.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry>DR 551</entry>
+ </row>
+ <row>
+ <entry>8.29</entry>
+ <entry>Additions to header <code>&lt;ctime&gt;</code></entry>
+ <entry>Y</entry>
+ <entry>C library dependency</entry>
+ </row>
+ <row>
+ <entry>8.30</entry>
+ <entry>Additions to header <code>&lt;cwchar&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.30.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.30.2</entry>
+ <entry>Definitions</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.30.3</entry>
+ <entry>Additional wide format specifiers</entry>
+ <entry>Y</entry>
+ <entry>C library dependency</entry>
+ </row>
+ <row>
+ <entry>8.31</entry>
+ <entry>Additions to header <code>&lt;wchar.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.32</entry>
+ <entry>Additions to header <code>&lt;cwctype&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.32.1</entry>
+ <entry>Synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.32.2</entry>
+ <entry>Function <code>iswblank</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>8.33</entry>
+ <entry>Additions to header <code>&lt;wctype.h&gt;</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ </tbody>
+</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/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
new file mode 100644
index 000000000..540c01692
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
@@ -0,0 +1,297 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="status.iso.tr24733" xreflabel="Status C++ TR24733">
+<?dbhtml filename="status_iso_cxxtr24733.html"?>
+
+<info><title>C++ TR 24733</title>
+ <keywordset>
+ <keyword>TR 24733</keyword>
+ </keywordset>
+</info>
+
+<para>
+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
+decimal floating-point arithmetic
+</para>
+
+<para>
+This page describes the TR 24733 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++ TR 24733 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>0</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Introduction</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <emphasis>1</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Normative references</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <emphasis>2</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Conventions</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <emphasis>3</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Decimal floating-point types</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>3.1</entry>
+ <entry>Characteristics of decimal floating-point types</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.2</entry>
+ <entry>Decimal Types</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>3.2.1</entry>
+ <entry>Class <code>decimal</code> synopsis</entry>
+ <entry>Partial</entry>
+ <entry>Missing declarations for formatted input/output; non-conforming extension for functions converting to integral type</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>3.2.2</entry>
+ <entry>Class <code>decimal32</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing 3.2.2.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>3.2.3</entry>
+ <entry>Class <code>decimal64</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing 3.2.3.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</entry>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>3.2.4</entry>
+ <entry>Class <code>decimal128</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing 3.2.4.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point</entry>
+ </row>
+ <row>
+ <entry>3.2.5</entry>
+ <entry>Initialization from coefficient and exponent</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.2.6</entry>
+ <entry>Conversion to generic floating-point type</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.2.7</entry>
+ <entry>Unary arithmetic operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.2.8</entry>
+ <entry>Binary arithmetic operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.2.9</entry>
+ <entry>Comparison operators</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.2.10</entry>
+ <entry>Formatted input</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.2.11</entry>
+ <entry>Formatted output</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.3</entry>
+ <entry>Additions to header <code>limits</code></entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.4</entry>
+ <entry>Headers <code>cfloat</code> and <code>float.h</code></entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.4.2</entry>
+ <entry>Additions to header <code>cfloat</code> synopsis</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>3.4.3</entry>
+ <entry>Additions to header <code>float.h</code> synopsis</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.4.4</entry>
+ <entry>Maximum finite value</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.4.5</entry>
+ <entry>Epsilon</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.4.6</entry>
+ <entry>Minimum positive normal value</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.4.7</entry>
+ <entry>Minimum positive subnormal value</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>3.4.8</entry>
+ <entry>Evaluation format</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.5</entry>
+ <entry>Additions to <code>cfenv</code> and <code>fenv.h</code></entry>
+ <entry>Outside the scope of GCC</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.6</entry>
+ <entry>Additions to <code>cmath</code> and <code>math.h</code></entry>
+ <entry>Outside the scope of GCC</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.7</entry>
+ <entry>Additions to <code>cstdio</code> and <code>stdio.h</code></entry>
+ <entry>Outside the scope of GCC</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.8</entry>
+ <entry>Additions to <code>cstdlib</code> and <code>stdlib.h</code></entry>
+ <entry>Outside the scope of GCC</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.9</entry>
+ <entry>Additions to <code>cwchar</code> and <code>wchar.h</code></entry>
+ <entry>Outside the scope of GCC</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.10</entry>
+ <entry>Facets</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.11</entry>
+ <entry>Type traits</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>3.12</entry>
+ <entry>Hash functions</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry>
+ <emphasis>4</emphasis>
+ </entry>
+ <entry namest="c2" nameend="c4" align="left">
+ <emphasis>Notes on C compatibility</emphasis>
+ </entry>
+ </row>
+
+ </tbody>
+</tgroup>
+</table>
+
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/strings.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/strings.xml
new file mode 100644
index 000000000..d281c02bd
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/strings.xml
@@ -0,0 +1,482 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.strings" xreflabel="Strings">
+<?dbhtml filename="strings.html"?>
+
+<info><title>
+ Strings
+ <indexterm><primary>Strings</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+<!-- Sect1 01 : Character Traits -->
+
+<!-- Sect1 02 : String Classes -->
+<section xml:id="std.strings.string" xreflabel="string"><info><title>String Classes</title></info>
+
+
+ <section xml:id="strings.string.simple" xreflabel="Simple Transformations"><info><title>Simple Transformations</title></info>
+
+ <para>
+ Here are Standard, simple, and portable ways to perform common
+ transformations on a <code>string</code> instance, such as
+ "convert to all upper case." The word transformations
+ is especially apt, because the standard template function
+ <code>transform&lt;&gt;</code> is used.
+ </para>
+ <para>
+ This code will go through some iterations. Here's a simple
+ version:
+ </para>
+ <programlisting>
+ #include &lt;string&gt;
+ #include &lt;algorithm&gt;
+ #include &lt;cctype&gt; // old &lt;ctype.h&gt;
+
+ struct ToLower
+ {
+ char operator() (char c) const { return std::tolower(c); }
+ };
+
+ struct ToUpper
+ {
+ char operator() (char c) const { return std::toupper(c); }
+ };
+
+ int main()
+ {
+ std::string s ("Some Kind Of Initial Input Goes Here");
+
+ // Change everything into upper case
+ std::transform (s.begin(), s.end(), s.begin(), ToUpper());
+
+ // Change everything into lower case
+ std::transform (s.begin(), s.end(), s.begin(), ToLower());
+
+ // Change everything back into upper case, but store the
+ // result in a different string
+ std::string capital_s;
+ capital_s.resize(s.size());
+ std::transform (s.begin(), s.end(), capital_s.begin(), ToUpper());
+ }
+ </programlisting>
+ <para>
+ <emphasis>Note</emphasis> that these calls all
+ involve the global C locale through the use of the C functions
+ <code>toupper/tolower</code>. This is absolutely guaranteed to work --
+ but <emphasis>only</emphasis> if the string contains <emphasis>only</emphasis> characters
+ from the basic source character set, and there are <emphasis>only</emphasis>
+ 96 of those. Which means that not even all English text can be
+ represented (certain British spellings, proper names, and so forth).
+ So, if all your input forevermore consists of only those 96
+ characters (hahahahahaha), then you're done.
+ </para>
+ <para><emphasis>Note</emphasis> that the
+ <code>ToUpper</code> and <code>ToLower</code> function objects
+ are needed because <code>toupper</code> and <code>tolower</code>
+ are overloaded names (declared in <code>&lt;cctype&gt;</code> and
+ <code>&lt;locale&gt;</code>) so the template-arguments for
+ <code>transform&lt;&gt;</code> cannot be deduced, as explained in
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html">this
+ message</link>.
+ <!-- section 14.8.2.4 clause 16 in ISO 14882:1998 -->
+ At minimum, you can write short wrappers like
+ </para>
+ <programlisting>
+ char toLower (char c)
+ {
+ return std::tolower(c);
+ } </programlisting>
+ <para>(Thanks to James Kanze for assistance and suggestions on all of this.)
+ </para>
+ <para>Another common operation is trimming off excess whitespace. Much
+ like transformations, this task is trivial with the use of string's
+ <code>find</code> family. These examples are broken into multiple
+ statements for readability:
+ </para>
+ <programlisting>
+ std::string str (" \t blah blah blah \n ");
+
+ // trim leading whitespace
+ string::size_type notwhite = str.find_first_not_of(" \t\n");
+ str.erase(0,notwhite);
+
+ // trim trailing whitespace
+ notwhite = str.find_last_not_of(" \t\n");
+ str.erase(notwhite+1); </programlisting>
+ <para>Obviously, the calls to <code>find</code> could be inserted directly
+ into the calls to <code>erase</code>, in case your compiler does not
+ optimize named temporaries out of existence.
+ </para>
+
+ </section>
+ <section xml:id="strings.string.case" xreflabel="Case Sensitivity"><info><title>Case Sensitivity</title></info>
+
+ <para>
+ </para>
+
+ <para>The well-known-and-if-it-isn't-well-known-it-ought-to-be
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gotw.ca/gotw/">Guru of the Week</link>
+ discussions held on Usenet covered this topic in January of 1998.
+ Briefly, the challenge was, <quote>write a 'ci_string' class which
+ is identical to the standard 'string' class, but is
+ case-insensitive in the same way as the (common but nonstandard)
+ C function stricmp()</quote>.
+ </para>
+ <programlisting>
+ ci_string s( "AbCdE" );
+
+ // case insensitive
+ assert( s == "abcde" );
+ assert( s == "ABCDE" );
+
+ // still case-preserving, of course
+ assert( strcmp( s.c_str(), "AbCdE" ) == 0 );
+ assert( strcmp( s.c_str(), "abcde" ) != 0 ); </programlisting>
+
+ <para>The solution is surprisingly easy. The original answer was
+ posted on Usenet, and a revised version appears in Herb Sutter's
+ book <emphasis>Exceptional C++</emphasis> and on his website as <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gotw.ca/gotw/029.htm">GotW 29</link>.
+ </para>
+ <para>See? Told you it was easy!</para>
+ <para>
+ <emphasis>Added June 2000:</emphasis> The May 2000 issue of C++
+ Report contains a fascinating <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://lafstern.org/matt/col2_new.pdf"> article</link> by
+ Matt Austern (yes, <emphasis>the</emphasis> Matt Austern) on why
+ case-insensitive comparisons are not as easy as they seem, and
+ why creating a class is the <emphasis>wrong</emphasis> way to go
+ about it in production code. (The GotW answer mentions one of
+ the principle difficulties; his article mentions more.)
+ </para>
+ <para>Basically, this is "easy" only if you ignore some things,
+ things which may be too important to your program to ignore. (I chose
+ to ignore them when originally writing this entry, and am surprised
+ that nobody ever called me on it...) The GotW question and answer
+ remain useful instructional tools, however.
+ </para>
+ <para><emphasis>Added September 2000:</emphasis> James Kanze provided a link to a
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.unicode.org/reports/tr21/tr21-5.html">Unicode
+ Technical Report discussing case handling</link>, which provides some
+ very good information.
+ </para>
+
+ </section>
+ <section xml:id="strings.string.character_types" xreflabel="Arbitrary Characters"><info><title>Arbitrary Character Types</title></info>
+
+ <para>
+ </para>
+
+ <para>The <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
+ <code>std::basic_string&lt;my_unicode_char&gt;</code>, or assuming
+ that integers are wider than characters on your platform, maybe just
+ declare variables of type <code>std::basic_string&lt;int&gt;</code>.
+ </para>
+ <para>That's the theory. Remember however that basic_string has additional
+ type parameters, which take default arguments based on the character
+ type (called <code>CharT</code> here):
+ </para>
+ <programlisting>
+ template &lt;typename CharT,
+ typename Traits = char_traits&lt;CharT&gt;,
+ typename Alloc = allocator&lt;CharT&gt; &gt;
+ class basic_string { .... };</programlisting>
+ <para>Now, <code>allocator&lt;CharT&gt;</code> will probably Do The Right
+ Thing by default, unless you need to implement your own allocator
+ for your characters.
+ </para>
+ <para>But <code>char_traits</code> takes more work. The char_traits
+ template is <emphasis>declared</emphasis> but not <emphasis>defined</emphasis>.
+ That means there is only
+ </para>
+ <programlisting>
+ template &lt;typename CharT&gt;
+ struct char_traits
+ {
+ static void foo (type1 x, type2 y);
+ ...
+ };</programlisting>
+ <para>and functions such as char_traits&lt;CharT&gt;::foo() are not
+ actually defined anywhere for the general case. The C++ standard
+ permits this, because writing such a definition to fit all possible
+ CharT's cannot be done.
+ </para>
+ <para>The C++ standard also requires that char_traits be specialized for
+ instantiations of <code>char</code> and <code>wchar_t</code>, and it
+ is these template specializations that permit entities like
+ <code>basic_string&lt;char,char_traits&lt;char&gt;&gt;</code> to work.
+ </para>
+ <para>If you want to use character types other than char and wchar_t,
+ such as <code>unsigned char</code> and <code>int</code>, you will
+ need suitable specializations for them. For a time, in earlier
+ versions of GCC, there was a mostly-correct implementation that
+ let programmers be lazy but it broke under many situations, so it
+ was removed. GCC 3.4 introduced a new implementation that mostly
+ works and can be specialized even for <code>int</code> and other
+ built-in types.
+ </para>
+ <para>If you want to use your own special character class, then you have
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html">a lot
+ of work to do</link>, especially if you with to use i18n features
+ (facets require traits information but don't have a traits argument).
+ </para>
+ <para>Another example of how to specialize char_traits was given <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html">on the
+ mailing list</link> and at a later date was put into the file <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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html">the
+ nice-looking first attempt</link> turned out to <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html">not
+ be conforming C++</link>, due to the rule that CharT must be a POD.
+ (See how tricky this is?)
+ </para>
+
+ </section>
+
+ <section xml:id="strings.string.token" xreflabel="Tokenizing"><info><title>Tokenizing</title></info>
+
+ <para>
+ </para>
+ <para>The Standard C (and C++) function <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
+ you to handle all the memory problems. But it does let the client
+ code decide what to use to break the string into pieces; it allows
+ you to choose the "whitespace," so to speak.
+ </para>
+ <para>A C++ implementation lets us keep the good things and fix those
+ annoyances. The implementation here is more intuitive (you only
+ call it once, not in a loop with varying argument), it does not
+ affect the original string at all, and all the memory allocation
+ is handled for you.
+ </para>
+ <para>It's called stringtok, and it's a template function. Sources are
+ as below, in a less-portable form than it could be, to keep this
+ example simple (for example, see the comments on what kind of
+ string it will accept).
+ </para>
+
+<programlisting>
+#include &lt;string&gt;
+template &lt;typename Container&gt;
+void
+stringtok(Container &amp;container, string const &amp;in,
+ const char * const delimiters = " \t\n")
+{
+ const string::size_type len = in.length();
+ string::size_type i = 0;
+
+ while (i &lt; len)
+ {
+ // Eat leading whitespace
+ i = in.find_first_not_of(delimiters, i);
+ if (i == string::npos)
+ return; // Nothing left but white space
+
+ // Find the end of the token
+ string::size_type j = in.find_first_of(delimiters, i);
+
+ // Push token
+ if (j == string::npos)
+ {
+ container.push_back(in.substr(i));
+ return;
+ }
+ else
+ container.push_back(in.substr(i, j-i));
+
+ // Set up for next loop
+ i = j + 1;
+ }
+}
+</programlisting>
+
+
+ <para>
+ The author uses a more general (but less readable) form of it for
+ parsing command strings and the like. If you compiled and ran this
+ code using it:
+ </para>
+
+
+ <programlisting>
+ std::list&lt;string&gt; ls;
+ stringtok (ls, " this \t is\t\n a test ");
+ for (std::list&lt;string&gt;const_iterator i = ls.begin();
+ i != ls.end(); ++i)
+ {
+ std::cerr &lt;&lt; ':' &lt;&lt; (*i) &lt;&lt; ":\n";
+ } </programlisting>
+ <para>You would see this as output:
+ </para>
+ <programlisting>
+ :this:
+ :is:
+ :a:
+ :test: </programlisting>
+ <para>with all the whitespace removed. The original <code>s</code> is still
+ available for use, <code>ls</code> will clean up after itself, and
+ <code>ls.size()</code> will return how many tokens there were.
+ </para>
+ <para>As always, there is a price paid here, in that stringtok is not
+ as fast as strtok. The other benefits usually outweigh that, however.
+ </para>
+
+ <para><emphasis>Added February 2001:</emphasis> Mark Wilden pointed out that the
+ standard <code>std::getline()</code> function can be used with standard
+ <code>istringstreams</code> to perform
+ 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.
+ </para>
+
+
+ </section>
+ <section xml:id="strings.string.shrink" xreflabel="Shrink to Fit"><info><title>Shrink to Fit</title></info>
+
+ <para>
+ </para>
+ <para>From GCC 3.4 calling <code>s.reserve(res)</code> on a
+ <code>string s</code> with <code>res &lt; s.capacity()</code> will
+ reduce the string's capacity to <code>std::max(s.size(), res)</code>.
+ </para>
+ <para>This behaviour is suggested, but not required by the standard. Prior
+ to GCC 3.4 the following alternative can be used instead
+ </para>
+ <programlisting>
+ std::string(str.data(), str.size()).swap(str);
+ </programlisting>
+ <para>This is similar to the idiom for reducing
+ a <code>vector</code>'s memory usage
+ (see <link linkend="faq.size_equals_capacity">this FAQ
+ 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.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>
+
+
+ </section>
+
+ <section xml:id="strings.string.Cstring" xreflabel="CString (MFC)"><info><title>CString (MFC)</title></info>
+
+ <para>
+ </para>
+
+ <para>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
+ answer is better than a proprietary nonportable one, but in porting
+ their application from a Win32 platform, they discover that they
+ are relying on special functions offered by the CString class.
+ </para>
+ <para>Things are not as bad as they seem. In
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html">this
+ message</link>, Joe Buck points out a few very important things:
+ </para>
+ <itemizedlist>
+ <listitem><para>The Standard <code>string</code> supports all the operations
+ that CString does, with three exceptions.
+ </para></listitem>
+ <listitem><para>Two of those exceptions (whitespace trimming and case
+ conversion) are trivial to implement. In fact, we do so
+ on this page.
+ </para></listitem>
+ <listitem><para>The third is <code>CString::Format</code>, which allows formatting
+ in the style of <code>sprintf</code>. This deserves some mention:
+ </para></listitem>
+ </itemizedlist>
+ <para>
+ The old libg++ library had a function called form(), which did much
+ the same thing. But for a Standard solution, you should use the
+ stringstream classes. These are the bridge between the iostream
+ hierarchy and the string class, and they operate with regular
+ streams seamlessly because they inherit from the iostream
+ hierarchy. An quick example:
+ </para>
+ <programlisting>
+ #include &lt;iostream&gt;
+ #include &lt;string&gt;
+ #include &lt;sstream&gt;
+
+ string f (string&amp; incoming) // incoming is "foo N"
+ {
+ istringstream incoming_stream(incoming);
+ string the_word;
+ int the_number;
+
+ incoming_stream &gt;&gt; the_word // extract "foo"
+ &gt;&gt; the_number; // extract N
+
+ ostringstream output_stream;
+ output_stream &lt;&lt; "The word was " &lt;&lt; the_word
+ &lt;&lt; " and 3*N was " &lt;&lt; (3*the_number);
+
+ return output_stream.str();
+ } </programlisting>
+ <para>A serious problem with CString is a design bug in its memory
+ allocation. Specifically, quoting from that same message:
+ </para>
+ <programlisting>
+ CString suffers from a common programming error that results in
+ poor performance. Consider the following code:
+
+ CString n_copies_of (const CString&amp; foo, unsigned n)
+ {
+ CString tmp;
+ for (unsigned i = 0; i &lt; n; i++)
+ tmp += foo;
+ return tmp;
+ }
+
+ This function is O(n^2), not O(n). The reason is that each +=
+ causes a reallocation and copy of the existing string. Microsoft
+ applications are full of this kind of thing (quadratic performance
+ on tasks that can be done in linear time) -- on the other hand,
+ we should be thankful, as it's created such a big market for high-end
+ ix86 hardware. :-)
+
+ If you replace CString with string in the above function, the
+ performance is O(n).
+ </programlisting>
+ <para>Joe Buck also pointed out some other things to keep in mind when
+ comparing CString and the Standard string class:
+ </para>
+ <itemizedlist>
+ <listitem><para>CString permits access to its internal representation; coders
+ who exploited that may have problems moving to <code>string</code>.
+ </para></listitem>
+ <listitem><para>Microsoft ships the source to CString (in the files
+ MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation
+ bug and rebuild your MFC libraries.
+ <emphasis><emphasis>Note:</emphasis> It looks like the CString shipped
+ with VC++6.0 has fixed this, although it may in fact have been
+ one of the VC++ SPs that did it.</emphasis>
+ </para></listitem>
+ <listitem><para><code>string</code> operations like this have O(n) complexity
+ <emphasis>if the implementors do it correctly</emphasis>. The libstdc++
+ implementors did it correctly. Other vendors might not.
+ </para></listitem>
+ <listitem><para>While chapters of the SGI STL are used in libstdc++, their
+ string class is not. The SGI <code>string</code> is essentially
+ <code>vector&lt;char&gt;</code> and does not do any reference
+ counting like libstdc++'s does. (It is O(n), though.)
+ So if you're thinking about SGI's string or rope classes,
+ you're now looking at four possibilities: CString, the
+ 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?)
+ </para></listitem>
+ </itemizedlist>
+
+ </section>
+</section>
+
+<!-- Sect1 03 : Interacting with C -->
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/support.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/support.xml
new file mode 100644
index 000000000..4d33a46f4
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/support.xml
@@ -0,0 +1,439 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.support" xreflabel="Support">
+<?dbhtml filename="support.html"?>
+
+<info><title>
+ Support
+ <indexterm><primary>Support</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+ <para>
+ This part deals with the functions called and objects created
+ automatically during the course of a program's existence.
+ </para>
+
+ <para>
+ While we can't reproduce the contents of the Standard here (you
+ 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.
+ </para>
+
+<section xml:id="std.support.types" xreflabel="Types"><info><title>Types</title></info>
+ <?dbhtml filename="fundamental_types.html"?>
+
+ <section xml:id="std.support.types.fundamental" xreflabel="Fundamental Types"><info><title>Fundamental Types</title></info>
+
+ <para>
+ C++ has the following builtin types:
+ </para>
+ <itemizedlist>
+ <listitem><para>
+ char
+ </para></listitem>
+ <listitem><para>
+ signed char
+ </para></listitem>
+ <listitem><para>
+ unsigned char
+ </para></listitem>
+ <listitem><para>
+ signed short
+ </para></listitem>
+ <listitem><para>
+ signed int
+ </para></listitem>
+ <listitem><para>
+ signed long
+ </para></listitem>
+ <listitem><para>
+ unsigned short
+ </para></listitem>
+ <listitem><para>
+ unsigned int
+ </para></listitem>
+ <listitem><para>
+ unsigned long
+ </para></listitem>
+ <listitem><para>
+ bool
+ </para></listitem>
+ <listitem><para>
+ wchar_t
+ </para></listitem>
+ <listitem><para>
+ float
+ </para></listitem>
+ <listitem><para>
+ double
+ </para></listitem>
+ <listitem><para>
+ long double
+ </para></listitem>
+ </itemizedlist>
+
+ <para>
+ These fundamental types are always available, without having to
+ include a header file. These types are exactly the same in
+ either C++ or in C.
+ </para>
+
+ <para>
+ Specializing parts of the library on these types is prohibited:
+ instead, use a POD.
+ </para>
+
+ </section>
+ <section xml:id="std.support.types.numeric_limits" xreflabel="Numeric Properties"><info><title>Numeric Properties</title></info>
+
+
+
+ <para>
+ The header <filename class="headerfile">limits</filename> 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
+ <classname>numeric_limits</classname>, documented <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html">here</link>
+ and defined as follows:
+ </para>
+
+ <programlisting>
+ template&lt;typename T&gt;
+ struct class
+ {
+ static const bool is_specialized;
+ static T max() throw();
+ static T min() throw();
+
+ static const int digits;
+ static const int digits10;
+ static const bool is_signed;
+ static const bool is_integer;
+ static const bool is_exact;
+ static const int radix;
+ static T epsilon() throw();
+ static T round_error() throw();
+
+ static const int min_exponent;
+ static const int min_exponent10;
+ static const int max_exponent;
+ static const int max_exponent10;
+
+ static const bool has_infinity;
+ static const bool has_quiet_NaN;
+ static const bool has_signaling_NaN;
+ static const float_denorm_style has_denorm;
+ static const bool has_denorm_loss;
+ static T infinity() throw();
+ static T quiet_NaN() throw();
+ static T denorm_min() throw();
+
+ static const bool is_iec559;
+ static const bool is_bounded;
+ static const bool is_modulo;
+
+ static const bool traps;
+ static const bool tinyness_before;
+ static const float_round_style round_style;
+ };
+ </programlisting>
+ </section>
+
+ <section xml:id="std.support.types.null" xreflabel="NULL"><info><title>NULL</title></info>
+
+ <para>
+ The only change that might affect people is the type of
+ <constant>NULL</constant>: while it is required to be a macro,
+ the definition of that macro is <emphasis>not</emphasis> allowed
+ to be <constant>(void*)0</constant>, which is often used in C.
+ </para>
+
+ <para>
+ For <command>g++</command>, <constant>NULL</constant> is
+ <code>#define</code>'d to be
+ <constant>__null</constant>, a magic keyword extension of
+ <command>g++</command>.
+ </para>
+
+ <para>
+ The biggest problem of #defining <constant>NULL</constant> to be
+ something like <quote>0L</quote> is that the compiler will view
+ that as a long integer before it views it as a pointer, so
+ overloading won't do what you expect. (This is why
+ <command>g++</command> has a magic extension, so that
+ <constant>NULL</constant> is always a pointer.)
+ </para>
+
+ <para>In his book <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.awprofessional.com/titles/0-201-92488-9/"><emphasis>Effective
+ C++</emphasis></link>, 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
+ <constant>NULL</constant> that will match pointers before it
+ matches integers.
+ </para>
+ <para>See
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.awprofessional.com/titles/0-201-31015-5/">the
+ Effective C++ CD example</link>
+ </para>
+ </section>
+
+</section>
+
+<section xml:id="std.support.memory" xreflabel="Dynamic Memory"><info><title>Dynamic Memory</title></info>
+ <?dbhtml filename="dynamic_memory.html"?>
+
+ <para>
+ There are six flavors each of <function>new</function> and
+ <function>delete</function>, so make certain that you're using the right
+ ones. Here are quickie descriptions of <function>new</function>:
+ </para>
+ <itemizedlist>
+ <listitem><para>
+ single object form, throwing a
+ <classname>bad_alloc</classname> on errors; this is what most
+ people are used to using
+ </para></listitem>
+ <listitem><para>
+ Single object "nothrow" form, returning NULL on errors
+ </para></listitem>
+ <listitem><para>
+ Array <function>new</function>, throwing
+ <classname>bad_alloc</classname> on errors
+ </para></listitem>
+ <listitem><para>
+ Array nothrow <function>new</function>, returning
+ <constant>NULL</constant> on errors
+ </para></listitem>
+ <listitem><para>
+ Placement <function>new</function>, which does nothing (like
+ it's supposed to)
+ </para></listitem>
+ <listitem><para>
+ Placement array <function>new</function>, which also does
+ nothing
+ </para></listitem>
+ </itemizedlist>
+ <para>
+ They are distinguished by the parameters that you pass to them, like
+ any other overloaded function. The six flavors of <function>delete</function>
+ are distinguished the same way, but none of them are allowed to throw
+ an exception under any circumstances anyhow. (They match up for
+ completeness' sake.)
+ </para>
+ <para>
+ Remember that it is perfectly okay to call <function>delete</function> on a
+ NULL pointer! Nothing happens, by definition. That is not the
+ same thing as deleting a pointer twice.
+ </para>
+ <para>
+ By default, if one of the <quote>throwing <function>new</function>s</quote> can't
+ allocate the memory requested, it tosses an instance of a
+ <classname>bad_alloc</classname> exception (or, technically, some class derived
+ from it). You can change this by writing your own function (called a
+ new-handler) and then registering it with <function>set_new_handler()</function>:
+ </para>
+ <programlisting>
+ typedef void (*PFV)(void);
+
+ static char* safety;
+ static PFV old_handler;
+
+ void my_new_handler ()
+ {
+ delete[] safety;
+ popup_window ("Dude, you are running low on heap memory. You
+ should, like, close some windows, or something.
+ The next time you run out, we're gonna burn!");
+ set_new_handler (old_handler);
+ return;
+ }
+
+ int main ()
+ {
+ safety = new char[500000];
+ old_handler = set_new_handler (&amp;my_new_handler);
+ ...
+ }
+ </programlisting>
+ <para>
+ <classname>bad_alloc</classname> is derived from the base <classname>exception</classname>
+ class defined in Sect1 19.
+ </para>
+</section>
+
+<section xml:id="std.support.termination" xreflabel="Termination"><info><title>Termination</title></info>
+ <?dbhtml filename="termination.html"?>
+
+ <section xml:id="support.termination.handlers" xreflabel="Termination Handlers"><info><title>Termination Handlers</title></info>
+
+ <para>
+ Not many changes here to <filename class="headerfile">cstdlib</filename>. You should note that the
+ <function>abort()</function> function does not call the
+ destructors of automatic nor static objects, so if you're
+ depending on those to do cleanup, it isn't going to happen.
+ (The functions registered with <function>atexit()</function>
+ don't get called either, so you can forget about that
+ possibility, too.)
+ </para>
+ <para>
+ The good old <function>exit()</function> function can be a bit
+ funky, too, until you look closer. Basically, three points to
+ remember are:
+ </para>
+ <orderedlist inheritnum="ignore" continuation="restarts">
+ <listitem>
+ <para>
+ Static objects are destroyed in reverse order of their creation.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Functions registered with <function>atexit()</function> are called in
+ reverse order of registration, once per registration call.
+ (This isn't actually new.)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The previous two actions are <quote>interleaved,</quote> that is,
+ given this pseudocode:
+ </para>
+<programlisting>
+ extern "C or C++" void f1 (void);
+ extern "C or C++" void f2 (void);
+
+ static Thing obj1;
+ atexit(f1);
+ static Thing obj2;
+ atexit(f2);
+</programlisting>
+ <para>
+ then at a call of <function>exit()</function>,
+ <varname>f2</varname> will be called, then
+ <varname>obj2</varname> will be destroyed, then
+ <varname>f1</varname> will be called, and finally
+ <varname>obj1</varname> will be destroyed. If
+ <varname>f1</varname> or <varname>f2</varname> allow an
+ exception to propagate out of them, Bad Things happen.
+ </para>
+ </listitem>
+ </orderedlist>
+ <para>
+ Note also that <function>atexit()</function> is only required to store 32
+ functions, and the compiler/library might already be using some of
+ those slots. If you think you may run out, we recommend using
+ the <function>xatexit</function>/<function>xexit</function> combination from <literal>libiberty</literal>, which has no such limit.
+ </para>
+ </section>
+
+ <section xml:id="support.termination.verbose" xreflabel="Verbose Terminate Handler"><info><title>Verbose Terminate Handler</title></info>
+ <?dbhtml filename="verbose_termination.html"?>
+
+ <para>
+ 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.
+ </para>
+
+<programlisting>
+#include &lt;exception&gt;
+
+int main()
+{
+ std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
+ ...
+
+ throw <replaceable>anything</replaceable>;
+}
+</programlisting>
+
+ <para>
+ The <function>__verbose_terminate_handler</function> function
+ obtains the name of the current exception, attempts to demangle
+ it, and prints it to stderr. If the exception is derived from
+ <classname>exception</classname> then the output from
+ <function>what()</function> will be included.
+ </para>
+
+ <para>
+ Any replacement termination function is required to kill the
+ program without returning; this one calls abort.
+ </para>
+
+ <para>
+ For example:
+ </para>
+
+<programlisting>
+#include &lt;exception&gt;
+#include &lt;stdexcept&gt;
+
+struct argument_error : public std::runtime_error
+{
+ argument_error(const std::string&amp; s): std::runtime_error(s) { }
+};
+
+int main(int argc)
+{
+ std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
+ if (argc &gt; 5)
+ throw argument_error(<quote>argc is greater than 5!</quote>);
+ else
+ throw argc;
+}
+</programlisting>
+
+ <para>
+ With the verbose terminate handler active, this gives:
+ </para>
+
+ <screen>
+ <computeroutput>
+ % ./a.out
+ terminate called after throwing a `int'
+ Aborted
+ % ./a.out f f f f f f f f f f f
+ terminate called after throwing an instance of `argument_error'
+ what(): argc is greater than 5!
+ Aborted
+ </computeroutput>
+ </screen>
+
+ <para>
+ The 'Aborted' line comes from the call to
+ <function>abort()</function>, of course.
+ </para>
+
+ <para>
+ This is the default termination handler; nothing need be done to
+ use it. To go back to the previous <quote>silent death</quote>
+ method, simply include <filename>exception</filename> and
+ <filename>cstdlib</filename>, and call
+ </para>
+
+ <programlisting>
+ std::set_terminate(std::abort);
+ </programlisting>
+
+ <para>
+ After this, all calls to <function>terminate</function> will use
+ <function>abort</function> as the terminate handler.
+ </para>
+
+ <para>
+ Note: the verbose terminate handler will attempt to write to
+ stderr. If your application closes stderr or redirects it to an
+ inappropriate location,
+ <function>__verbose_terminate_handler</function> will behave in
+ an unspecified manner.
+ </para>
+
+ </section>
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/test.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/test.xml
new file mode 100644
index 000000000..b3d8ea361
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/test.xml
@@ -0,0 +1,1021 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.setup.test" xreflabel="Testing">
+<?dbhtml filename="test.html"?>
+
+<info><title>Test</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>test</keyword>
+ <keyword>testsuite</keyword>
+ <keyword>performance</keyword>
+ <keyword>conformance</keyword>
+ <keyword>ABI</keyword>
+ <keyword>exception safety</keyword>
+ </keywordset>
+</info>
+
+<para>
+The libstdc++ testsuite includes testing for standard conformance,
+regressions, ABI, and performance.
+</para>
+
+<section xml:id="test.organization" xreflabel="Test Organization"><info><title>Organization</title></info>
+
+
+<section xml:id="test.organization.layout" xreflabel="Directory Layout"><info><title>Directory Layout</title></info>
+
+
+<para>
+ The directory <emphasis>libsrcdir/testsuite</emphasis> contains the
+ individual test cases organized in sub-directories corresponding to
+ chapters of the C++ standard (detailed below), the dejagnu test
+ harness support files, and sources to various testsuite utilities
+ that are packaged in a separate testing library.
+</para>
+
+<para>
+ All test cases for functionality required by the runtime components
+ of the C++ standard (ISO 14882) are files within the following
+ directories.
+</para>
+
+ <programlisting>
+17_intro
+18_support
+19_diagnostics
+20_util
+21_strings
+22_locale
+23_containers
+25_algorithms
+26_numerics
+27_io
+28_regex
+29_atomics
+30_threads
+ </programlisting>
+
+ <para>
+ In addition, the following directories include test files:
+ </para>
+
+ <programlisting>
+tr1 Tests for components as described by the Technical Report on Standard Library Extensions (TR1).
+backward Tests for backwards compatibility and deprecated features.
+demangle Tests for __cxa_demangle, the IA 64 C++ ABI demangler
+ext Tests for extensions.
+performance Tests for performance analysis, and performance regressions.
+ </programlisting>
+
+ <para>
+ Some directories don't have test files, but instead contain
+ auxiliary information:
+ </para>
+
+ <programlisting>
+config Files for the dejagnu test harness.
+lib Files for the dejagnu test harness.
+libstdc++* Files for the dejagnu test harness.
+data Sample text files for testing input and output.
+util Files for libtestc++, utilities and testing routines.
+ </programlisting>
+
+ <para>
+ Within a directory that includes test files, there may be
+ additional subdirectories, or files. Originally, test cases
+ were appended to one file that represented a particular section
+ of the chapter under test, and was named accordingly. For
+ instance, to test items related to <code> 21.3.6.1 -
+ basic_string::find [lib.string::find]</code> in the standard,
+ the following was used:
+ </para>
+ <programlisting>
+21_strings/find.cc
+ </programlisting>
+ <para>
+ However, that practice soon became a liability as the test cases
+ became huge and unwieldy, and testing new or extended
+ functionality (like wide characters or named locales) became
+ frustrating, leading to aggressive pruning of test cases on some
+ platforms that covered up implementation errors. Now, the test
+ suite has a policy of one file, one test case, which solves the
+ above issues and gives finer grained results and more manageable
+ error debugging. As an example, the test case quoted above
+ becomes:
+ </para>
+ <programlisting>
+21_strings/basic_string/find/char/1.cc
+21_strings/basic_string/find/char/2.cc
+21_strings/basic_string/find/char/3.cc
+21_strings/basic_string/find/wchar_t/1.cc
+21_strings/basic_string/find/wchar_t/2.cc
+21_strings/basic_string/find/wchar_t/3.cc
+ </programlisting>
+
+ <para>
+ All new tests should be written with the policy of one test
+ case, one file in mind.
+ </para>
+</section>
+
+
+<section xml:id="test.organization.naming" xreflabel="Naming Conventions"><info><title>Naming Conventions</title></info>
+
+
+ <para>
+ In addition, there are some special names and suffixes that are
+ used within the testsuite to designate particular kinds of
+ tests.
+ </para>
+
+<itemizedlist>
+<listitem>
+ <para>
+ <emphasis>_xin.cc</emphasis>
+ </para>
+ <para>
+ This test case expects some kind of interactive input in order
+ to finish or pass. At the moment, the interactive tests are not
+ run by default. Instead, they are run by hand, like:
+ </para>
+ <programlisting>
+g++ 27_io/objects/char/3_xin.cc
+cat 27_io/objects/char/3_xin.in | a.out
+ </programlisting>
+</listitem>
+<listitem>
+ <para>
+ <emphasis>.in</emphasis>
+ </para>
+ <para>
+ This file contains the expected input for the corresponding <emphasis>
+ _xin.cc</emphasis> test case.
+ </para>
+</listitem>
+<listitem>
+ <para>
+ <emphasis>_neg.cc</emphasis>
+ </para>
+ <para>
+ This test case is expected to fail: it's a negative test. At the
+ moment, these are almost always compile time errors.
+ </para>
+</listitem>
+<listitem>
+ <para>
+ <emphasis>char</emphasis>
+ </para>
+ <para>
+ This can either be a directory name or part of a longer file
+ name, and indicates that this file, or the files within this
+ directory are testing the <code>char</code> instantiation of a
+ template.
+ </para>
+</listitem>
+<listitem>
+ <para>
+ <emphasis>wchar_t</emphasis>
+ </para>
+ <para>
+ This can either be a directory name or part of a longer file
+ name, and indicates that this file, or the files within this
+ directory are testing the <code>wchar_t</code> instantiation of
+ a template. Some hosts do not support <code>wchar_t</code>
+ functionality, so for these targets, all of these tests will not
+ be run.
+ </para>
+</listitem>
+<listitem>
+ <para>
+ <emphasis>thread</emphasis>
+ </para>
+ <para>
+ This can either be a directory name or part of a longer file
+ name, and indicates that this file, or the files within this
+ directory are testing situations where multiple threads are
+ being used.
+ </para>
+</listitem>
+<listitem>
+ <para>
+ <emphasis>performance</emphasis>
+ </para>
+ <para>
+ This can either be an enclosing directory name or part of a
+ specific file name. This indicates a test that is used to
+ analyze runtime performance, for performance regression testing,
+ or for other optimization related analysis. At the moment, these
+ test cases are not run by default.
+ </para>
+</listitem>
+</itemizedlist>
+
+</section>
+</section>
+
+
+<section xml:id="test.run" xreflabel="Running the Testsuite"><info><title>Running the Testsuite</title></info>
+
+
+ <section xml:id="test.run.basic"><info><title>Basic</title></info>
+
+
+ <para>
+ You can check the status of the build without installing it
+ using the dejagnu harness, much like the rest of the gcc
+ tools.</para>
+ <programlisting> make check</programlisting>
+ <para>in the <emphasis>libbuilddir</emphasis> directory.</para>
+ <para>or</para>
+ <programlisting> make check-target-libstdc++-v3</programlisting>
+ <para>in the <emphasis>gccbuilddir</emphasis> directory.
+ </para>
+
+ <para>
+ These commands are functionally equivalent and will create a
+ 'testsuite' directory underneath
+ <emphasis>libbuilddir</emphasis> containing the results of the
+ tests. Two results files will be generated: <emphasis>
+ libstdc++.sum</emphasis>, which is a PASS/FAIL summary for each
+ test, and <emphasis>libstdc++.log</emphasis> which is a log of
+ the exact command line passed to the compiler, the compiler
+ output, and the executable output (if any).
+ </para>
+
+ <para>
+ Archives of test results for various versions and platforms are
+ available on the GCC website in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/gcc-4.3/buildstat.html">build
+ status</link> section of each individual release, and are also
+ archived on a daily basis on the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc-testresults/current">gcc-testresults</link>
+ mailing list. Please check either of these places for a similar
+ combination of source version, operating system, and host CPU.
+ </para>
+ </section>
+
+ <section xml:id="test.run.variations"><info><title>Variations</title></info>
+
+ <para>
+ 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
+ installed tools, etc. In addition, there is a special rule for
+ checking the exported symbols of the shared library.
+ </para>
+ <para>
+ To debug the dejagnu test harness during runs, try invoking with a
+ specific argument to the variable RUNTESTFLAGS, as below.
+ </para>
+
+<programlisting>
+make check-target-libstdc++-v3 RUNTESTFLAGS="-v"
+</programlisting>
+
+ <para>
+ or
+ </para>
+
+<programlisting>
+make check-target-libstdc++-v3 RUNTESTFLAGS="-v -v"
+</programlisting>
+
+ <para>
+ To run a subset of the library tests, you will need to generate
+ the <emphasis>testsuite_files</emphasis> file by running
+ <command>make testsuite_files</command> in the
+ <emphasis>libbuilddir/testsuite</emphasis> directory, described
+ below. Edit the file to remove the tests you don't want and
+ then run the testsuite as normal.
+ </para>
+
+ <para>
+ There are two ways to run on a simulator: set up DEJAGNU to point to a
+ specially crafted site.exp, or pass down --target_board flags.
+ </para>
+
+ <para>
+ Example flags to pass down for various embedded builds are as follows:
+ </para>
+
+<programlisting>
+ --target=powerpc-eabism (libgloss/sim)
+make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=powerpc-sim"
+
+--target=calmrisc32 (libgloss/sid)
+make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=calmrisc32-sid"
+
+--target=xscale-elf (newlib/sim)
+make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=arm-sim"
+</programlisting>
+
+ <para>
+ Also, here is an example of how to run the libstdc++ testsuite
+ for a multilibed build directory with different ABI settings:
+ </para>
+
+ <programlisting>
+make check-target-libstdc++-v3 RUNTESTFLAGS='--target_board \"unix{-mabi=32,,-mabi=64}\"'
+</programlisting>
+
+ <para>
+ You can run the tests with a compiler and library that have
+ already been installed. Make sure that the compiler (e.g.,
+ <code>g++</code>) is in your <code>PATH</code>. If you are
+ using shared libraries, then you must also ensure that the
+ directory containing the shared version of libstdc++ is in your
+ <code>LD_LIBRARY_PATH</code>, or equivalent. If your GCC source
+ tree is at <code>/path/to/gcc</code>, then you can run the tests
+ as follows:
+ </para>
+
+<programlisting>
+runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
+</programlisting>
+
+ <para>
+ The testsuite will create a number of files in the directory in
+ which you run this command,. Some of those files might use the
+ same name as files created by other testsuites (like the ones
+ for GCC and G++), so you should not try to run all the
+ testsuites in parallel from the same directory.
+ </para>
+
+ <para>
+ In addition, there are some testing options that are mostly of
+ interest to library maintainers and system integrators. As such,
+ these tests may not work on all cpu and host combinations, and
+ may need to be executed in the
+ <emphasis>libbuilddir/testsuite</emphasis> directory. These
+ options include, but are not necessarily limited to, the
+ following:
+ </para>
+
+ <programlisting>
+ make testsuite_files
+ </programlisting>
+
+ <para>
+ Five files are generated that determine what test files
+ are run. These files are:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <emphasis>testsuite_files</emphasis>
+ </para>
+ <para>
+ This is a list of all the test cases that will be run. Each
+ test case is on a separate line, given with an absolute path
+ from the <emphasis>libsrcdir/testsuite</emphasis> directory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>testsuite_files_interactive</emphasis>
+ </para>
+ <para>
+ This is a list of all the interactive test cases, using the
+ same format as the file list above. These tests are not run
+ by default.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>testsuite_files_performance</emphasis>
+ </para>
+ <para>
+ This is a list of all the performance test cases, using the
+ same format as the file list above. These tests are not run
+ by default.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>testsuite_thread</emphasis>
+ </para>
+ <para>
+ This file indicates that the host system can run tests which
+ involved multiple threads.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>testsuite_wchar_t</emphasis>
+ </para>
+ <para>
+ This file indicates that the host system can run the wchar_t
+ tests, and corresponds to the macro definition <code>
+ _GLIBCXX_USE_WCHAR_T</code> in the file c++config.h.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <programlisting>
+ make check-abi
+ </programlisting>
+
+ <para>
+ The library ABI can be tested. This involves testing the shared
+ library against an ABI-defining previous version of symbol
+ exports.
+ </para>
+
+ <programlisting>
+ make check-compile
+ </programlisting>
+
+ <para>
+ This rule compiles, but does not link or execute, the
+ <emphasis>testsuite_files</emphasis> test cases and displays the
+ output on stdout.
+ </para>
+
+ <programlisting>
+ make check-performance
+ </programlisting>
+
+ <para>
+ This rule runs through the
+ <emphasis>testsuite_files_performance</emphasis> test cases and
+ collects information for performance analysis and can be used to
+ spot performance regressions. Various timing information is
+ collected, as well as number of hard page faults, and memory
+ used. This is not run by default, and the implementation is in
+ flux.
+ </para>
+
+ <para>
+ 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.
+ </para>
+ </section>
+
+ <section xml:id="test.run.permutations"><info><title>Permutations</title></info>
+
+ <para>
+ To run the libstdc++ test suite under the <link linkend="manual.ext.debug_mode">debug mode</link>, edit
+ <filename>libstdc++-v3/scripts/testsuite_flags</filename> to add the
+ compile-time flag <constant>-D_GLIBCXX_DEBUG</constant> to the
+ result printed by the <literal>--build-cxx</literal>
+ option. Additionally, add the
+ <constant>-D_GLIBCXX_DEBUG_PEDANTIC</constant> flag to turn on
+ pedantic checking. The libstdc++ test suite should produce
+ precisely the same results under debug mode that it does under
+ release mode: any deviation indicates an error in either the
+ library or the test suite.
+ </para>
+
+ <para>
+ The <link linkend="manual.ext.parallel_mode">parallel
+ mode</link> can be tested in much the same manner, substituting
+ <constant>-D_GLIBCXX_PARALLEL</constant> for
+ <constant>-D_GLIBCXX_DEBUG</constant> in the previous paragraph.
+ </para>
+
+ <para>
+ Or, just run the testsuites with <constant>CXXFLAGS</constant>
+ set to <constant>-D_GLIBCXX_DEBUG</constant> or
+ <constant>-D_GLIBCXX_PARALLEL</constant>.
+ </para>
+ </section>
+</section>
+
+<section xml:id="test.new_tests"><info><title>Writing a new test case</title></info>
+
+
+ <para>
+ The first step in making a new test case is to choose the correct
+ directory and file name, given the organization as previously
+ described.
+ </para>
+
+ <para>
+ All files are copyright the FSF, and GPL'd: this is very
+ important. The first copyright year should correspond to the date
+ the file was checked in to SVN.
+ </para>
+
+ <para>
+ As per the dejagnu instructions, always return 0 from main to
+ indicate success.
+ </para>
+
+ <para>
+ A bunch of utility functions and classes have already been
+ abstracted out into the testsuite utility library, <code>
+ libtestc++</code>. To use this functionality, just include the
+ appropriate header file: the library or specific object files will
+ automatically be linked in as part of the testsuite run.
+ </para>
+
+ <para>
+ For a test that needs to take advantage of the dejagnu test
+ harness, what follows below is a list of special keyword that
+ harness uses. Basically, a test case contains dg-keywords (see
+ dg.exp) indicating what to do and what kinds of behavior are to be
+ expected. New test cases should be written with the new style
+ DejaGnu framework in mind.
+ </para>
+
+ <para>
+ To ease transition, here is the list of dg-keyword documentation
+ lifted from dg.exp.
+ </para>
+
+<programlisting>
+# The currently supported options are:
+#
+# dg-prms-id N
+# set prms_id to N
+#
+# dg-options "options ..." [{ target selector }]
+# specify special options to pass to the tool (eg: compiler)
+#
+# dg-do do-what-keyword [{ target/xfail selector }]
+# `do-what-keyword' is tool specific and is passed unchanged to
+# ${tool}-dg-test. An example is gcc where `keyword' can be any of:
+# preprocess|compile|assemble|link|run
+# and will do one of: produce a .i, produce a .s, produce a .o,
+# produce an a.out, or produce an a.out and run it (the default is
+# compile).
+#
+# dg-error regexp comment [{ target/xfail selector } [{.|0|linenum}]]
+# indicate an error message &lt;regexp&gt; is expected on this line
+# (the test fails if it doesn't occur)
+# Linenum=0 for general tool messages (eg: -V arg missing).
+# "." means the current line.
+#
+# dg-warning regexp comment [{ target/xfail selector } [{.|0|linenum}]]
+# indicate a warning message &lt;regexp&gt; is expected on this line
+# (the test fails if it doesn't occur)
+#
+# dg-bogus regexp comment [{ target/xfail selector } [{.|0|linenum}]]
+# indicate a bogus error message &lt;regexp&gt; use to occur here
+# (the test fails if it does occur)
+#
+# dg-build regexp comment [{ target/xfail selector }]
+# indicate the build use to fail for some reason
+# (errors covered here include bad assembler generated, tool crashes,
+# and link failures)
+# (the test fails if it does occur)
+#
+# dg-excess-errors comment [{ target/xfail selector }]
+# indicate excess errors are expected (any line)
+# (this should only be used sparingly and temporarily)
+#
+# dg-output regexp [{ target selector }]
+# indicate the expected output of the program is &lt;regexp&gt;
+# (there may be multiple occurrences of this, they are concatenated)
+#
+# dg-final { tcl code }
+# add some tcl code to be run at the end
+# (there may be multiple occurrences of this, they are concatenated)
+# (unbalanced braces must be \-escaped)
+#
+# "{ target selector }" is a list of expressions that determine whether the
+# test succeeds or fails for a particular target, or in some cases whether the
+# option applies for a particular target. If the case of `dg-do' it specifies
+# whether the test case is even attempted on the specified target.
+#
+# The target selector is always optional. The format is one of:
+#
+# { xfail *-*-* ... } - the test is expected to fail for the given targets
+# { target *-*-* ... } - the option only applies to the given targets
+#
+# At least one target must be specified, use *-*-* for "all targets".
+# At present it is not possible to specify both `xfail' and `target'.
+# "native" may be used in place of "*-*-*".
+
+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 }
+
+Example 3: Testing for expected warnings on line 36
+// { dg-warning "string literals" "" { target *-*-* } 36 }
+
+Example 4: Testing for compilation errors on line 41
+// { dg-do compile }
+// { dg-error "no match for" "" { target *-*-* } 41 }
+
+Example 5: Testing with special command line settings, or without the
+use of pre-compiled headers, in particular the stdc++.h.gch file. Any
+options here will override the DEFAULT_CXXFLAGS and PCH_CXXFLAGS set
+up in the normal.exp file.
+// { dg-options "-O0" { target *-*-* } }
+</programlisting>
+
+ <para>
+ More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
+ </para>
+</section>
+
+
+<section xml:id="test.harness" xreflabel="Test Harness and Utilities"><info><title>Test Harness and Utilities</title></info>
+
+
+<section xml:id="test.harness.dejagnu"><info><title>Dejagnu Harness Details</title></info>
+
+ <para>
+ Underlying details of testing for conformance and regressions are
+ abstracted via the GNU Dejagnu package. This is similar to the
+ rest of GCC.
+ </para>
+
+
+<para>This is information for those looking at making changes to the testsuite
+structure, and/or needing to trace dejagnu's actions with --verbose. This
+will not be useful to people who are "merely" adding new tests to the existing
+structure.
+</para>
+
+<para>The first key point when working with dejagnu is the idea of a "tool".
+Files, directories, and functions are all implicitly used when they are
+named after the tool in use. Here, the tool will always be "libstdc++".
+</para>
+
+<para>The <code>lib</code> subdir contains support routines. The
+<code>lib/libstdc++.exp</code> file ("support library") is loaded
+automagically, and must explicitly load the others. For example, files can
+be copied from the core compiler's support directory into <code>lib</code>.
+</para>
+
+<para>Some routines in <code>lib/libstdc++.exp</code> are callbacks, some are
+our own. Callbacks must be prefixed with the name of the tool. To easily
+distinguish the others, by convention our own routines are named "v3-*".
+</para>
+
+<para>The next key point when working with dejagnu is "test files". Any
+directory whose name starts with the tool name will be searched for test files.
+(We have only one.) In those directories, any <code>.exp</code> file is
+considered a test file, and will be run in turn. Our main test file is called
+<code>normal.exp</code>; it runs all the tests in testsuite_files using the
+callbacks loaded from the support library.
+</para>
+
+<para>The <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.
+</para>
+
+</section>
+
+<section xml:id="test.harness.utils"><info><title>Utilities</title></info>
+
+ <para>
+ </para>
+ <para>
+ The testsuite directory also contains some files that implement
+ functionality that is intended to make writing test cases easier,
+ or to avoid duplication, or to provide error checking in a way that
+ is consistent across platforms and test harnesses. A stand-alone
+ executable, called <emphasis>abi_check</emphasis>, and a static
+ library called <emphasis>libtestc++</emphasis> are
+ constructed. Both of these items are not installed, and only used
+ during testing.
+ </para>
+
+ <para>
+ These files include the following functionality:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <emphasis>testsuite_abi.h</emphasis>,
+ <emphasis>testsuite_abi.cc</emphasis>,
+ <emphasis>testsuite_abi_check.cc</emphasis>
+ </para>
+ <para>
+ Creates the executable <emphasis>abi_check</emphasis>.
+ Used to check correctness of symbol versioning, visibility of
+ exported symbols, and compatibility on symbols in the shared
+ library, for hosts that support this feature. More information
+ can be found in the ABI documentation <link linkend="appendix.porting.abi">here</link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>testsuite_allocator.h</emphasis>,
+ <emphasis>testsuite_allocator.cc</emphasis>
+ </para>
+ <para>
+ Contains specialized allocators that keep track of construction
+ and destruction. Also, support for overriding global new and
+ delete operators, including verification that new and delete
+ are called during execution, and that allocation over max_size
+ fails.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>testsuite_character.h</emphasis>
+ </para>
+ <para>
+ Contains <code>std::char_traits</code> and
+ <code>std::codecvt</code> specializations for a user-defined
+ POD.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>testsuite_hooks.h</emphasis>,
+ <emphasis>testsuite_hooks.cc</emphasis>
+ </para>
+ <para>
+ A large number of utilities, including:
+ </para>
+ <itemizedlist>
+ <listitem><para>VERIFY</para></listitem>
+ <listitem><para>set_memory_limits</para></listitem>
+ <listitem><para>verify_demangle</para></listitem>
+ <listitem><para>run_tests_wrapped_locale</para></listitem>
+ <listitem><para>run_tests_wrapped_env</para></listitem>
+ <listitem><para>try_named_locale</para></listitem>
+ <listitem><para>try_mkfifo</para></listitem>
+ <listitem><para>func_callback</para></listitem>
+ <listitem><para>counter</para></listitem>
+ <listitem><para>copy_tracker</para></listitem>
+ <listitem><para>copy_constructor</para></listitem>
+ <listitem><para>assignment_operator</para></listitem>
+ <listitem><para>destructor</para></listitem>
+ <listitem>
+ <para>pod_char, pod_int and associated char_traits specializations</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>testsuite_io.h</emphasis>
+ </para>
+ <para>
+ Error, exception, and constraint checking for
+ <code>std::streambuf, std::basic_stringbuf, std::basic_filebuf</code>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>testsuite_iterators.h</emphasis>
+ </para>
+ <para>
+ Wrappers for various iterators.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>testsuite_performance.h</emphasis>
+ </para>
+ <para>
+ A number of class abstractions for performance counters, and
+ reporting functions including:
+ </para>
+ <itemizedlist>
+ <listitem><para>time_counter</para></listitem>
+ <listitem><para>resource_counter</para></listitem>
+ <listitem><para>report_performance</para></listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+</section>
+
+</section>
+
+<section xml:id="test.special"><info><title>Special Topics</title></info>
+
+
+<section xml:id="test.exception.safety"><info><title>
+ Qualifying Exception Safety Guarantees
+ <indexterm>
+ <primary>Test</primary>
+ <secondary>Exception Safety</secondary>
+ </indexterm>
+</title></info>
+
+
+<section xml:id="test.exception.safety.overview"><info><title>Overview</title></info>
+
+
+ <para>
+ 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
+ initial state, executing a particular sequence of code under
+ some instrumented conditions, measuring a final state, and
+ then examining the differences between the two states.
+ </para>
+
+ <para>
+ Test sequences are composed of constructed code sequences
+ that exercise a particular function or member function, and
+ either confirm no exceptions were generated, or confirm the
+ consistency/coherency of the test subject in the event of a
+ thrown exception.
+ </para>
+
+ <para>
+ Random code paths can be constructed using the basic test
+ sequences and instrumentation as above, only combined in a
+ random or pseudo-random way.
+ </para>
+
+ <para> To compute the code paths that throw, test instruments
+ are used that throw on allocation events
+ (<classname>__gnu_cxx::throw_allocator_random</classname>
+ and <classname>__gnu_cxx::throw_allocator_limit</classname>)
+ and copy, assignment, comparison, increment, swap, and
+ various operators
+ (<classname>__gnu_cxx::throw_type_random</classname>
+ and <classname>__gnu_cxx::throw_type_limit</classname>). Looping
+ through a given test sequence and conditionally throwing in
+ all instrumented places. Then, when the test sequence
+ completes without an exception being thrown, assume all
+ potential error paths have been exercised in a sequential
+ manner.
+ </para>
+</section>
+
+
+<section xml:id="test.exception.safety.status"><info><title>
+ Existing tests
+</title></info>
+
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Ad Hoc
+ </para>
+ <para>
+ For example,
+ <filename>testsuite/23_containers/list/modifiers/3.cc</filename>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Policy Based Data Structures
+ </para>
+ <para>
+ For example, take the test
+ functor <classname>rand_reg_test</classname> in
+ in <filename>testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc</filename>. This uses <classname>container_rand_regression_test</classname> in
+<filename>testsuite/util/regression/rand/assoc/container_rand_regression_test.h</filename>.
+
+ </para>
+
+ <para>
+ Which has several tests for container member functions,
+Includes control and test container objects. Configuration includes
+random seed, iterations, number of distinct values, and the
+probability that an exception will be thrown. Assumes instantiating
+container uses an extension
+allocator, <classname>__gnu_cxx::throw_allocator_random</classname>,
+as the allocator type.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ C++11 Container Requirements.
+ </para>
+
+ <para>
+ Coverage is currently limited to testing container
+ requirements for exception safety,
+ although <classname>__gnu_cxx::throw_type</classname> meets
+ the additional type requirements for testing numeric data
+ structures and instantiating algorithms.
+ </para>
+
+ <para>
+ Of particular interest is extending testing to algorithms and
+ then to parallel algorithms. Also io and locales.
+ </para>
+
+ <para>
+ The test instrumentation should also be extended to add
+ instrumentation to <classname>iterator</classname>
+ and <classname>const_iterator</classname> types that throw
+ conditionally on iterator operations.
+ </para>
+ </listitem>
+ </itemizedlist>
+</section>
+
+
+<section xml:id="test.exception.safety.containers"><info><title>
+C++11 Requirements Test Sequence Descriptions
+</title></info>
+
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Basic
+ </para>
+
+ <para>
+ Basic consistency on exception propagation tests. For
+ each container, an object of that container is constructed,
+ a specific member function is exercised in
+ a <literal>try</literal> block, and then any thrown
+ exceptions lead to error checking in the appropriate
+ <literal>catch</literal> block. The container's use of
+ resources is compared to the container's use prior to the
+ test block. Resource monitoring is limited to allocations
+ made through the container's <type>allocator_type</type>,
+ which should be sufficient for container data
+ structures. Included in these tests are member functions
+ are <type>iterator</type> and <type>const_iterator</type>
+ operations, <function>pop_front</function>, <function>pop_back</function>, <function>push_front</function>, <function>push_back</function>, <function>insert</function>, <function>erase</function>, <function>swap</function>, <function>clear</function>,
+ and <function>rehash</function>. The container in question is
+ instantiated with two instrumented template arguments,
+ with <classname>__gnu_cxx::throw_allocator_limit</classname>
+ as the allocator type, and
+ with <classname>__gnu_cxx::throw_type_limit</classname> as
+ the value type. This allows the test to loop through
+ conditional throw points.
+ </para>
+
+ <para>
+ The general form is demonstrated in
+ <filename>testsuite/23_containers/list/requirements/exception/basic.cc
+ </filename>. The instantiating test object is <classname>__gnu_test::basic_safety</classname> and is detailed in <filename>testsuite/util/exception/safety.h</filename>.
+ </para>
+ </listitem>
+
+
+ <listitem>
+ <para>
+ Generation Prohibited
+ </para>
+
+ <para>
+ Exception generation tests. For each container, an object of
+ that container is constructed and all member functions
+ required to not throw exceptions are exercised. Included in
+ these tests are member functions
+ are <type>iterator</type> and <type>const_iterator</type> operations, <function>erase</function>, <function>pop_front</function>, <function>pop_back</function>, <function>swap</function>,
+ and <function>clear</function>. The container in question is
+ instantiated with two instrumented template arguments,
+ with <classname>__gnu_cxx::throw_allocator_random</classname>
+ as the allocator type, and
+ with <classname>__gnu_cxx::throw_type_random</classname> as
+ the value type. This test does not loop, an instead is sudden
+ death: first error fails.
+ </para>
+ <para>
+ The general form is demonstrated in
+ <filename>testsuite/23_containers/list/requirements/exception/generation_prohibited.cc
+ </filename>. The instantiating test object is <classname>__gnu_test::generation_prohibited</classname> and is detailed in <filename>testsuite/util/exception/safety.h</filename>.
+ </para>
+ </listitem>
+
+
+ <listitem>
+ <para>
+ Propagation Consistent
+ </para>
+
+ <para>
+ Container rollback on exception propagation tests. For
+ each container, an object of that container is constructed,
+ a specific member function that requires rollback to a previous
+ known good state is exercised in
+ a <literal>try</literal> block, and then any thrown
+ exceptions lead to error checking in the appropriate
+ <literal>catch</literal> block. The container is compared to
+ the container's last known good state using such parameters
+ as size, contents, and iterator references. Included in these
+ tests are member functions
+ are <function>push_front</function>, <function>push_back</function>, <function>insert</function>,
+ and <function>rehash</function>. The container in question is
+ instantiated with two instrumented template arguments,
+ with <classname>__gnu_cxx::throw_allocator_limit</classname>
+ as the allocator type, and
+ with <classname>__gnu_cxx::throw_type_limit</classname> as
+ the value type. This allows the test to loop through
+ conditional throw points.
+ </para>
+
+ <para>
+ The general form demonstrated in
+ <filename>testsuite/23_containers/list/requirements/exception/propagation_coherent.cc
+ </filename>. The instantiating test object is <classname>__gnu_test::propagation_coherent</classname> and is detailed in <filename>testsuite/util/exception/safety.h</filename>.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+</section>
+
+</section>
+
+</section>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
new file mode 100644
index 000000000..241ec9f0e
--- /dev/null
+++ b/gcc-4.8.3/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/gcc-4.8.3/libstdc++-v3/doc/xml/manual/using.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/using.xml
new file mode 100644
index 000000000..dfc5cef24
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/using.xml
@@ -0,0 +1,1598 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.using" xreflabel="Using">
+ <info><title>Using</title></info>
+ <?dbhtml filename="using.html"?>
+
+ <section xml:id="manual.intro.using.flags" xreflabel="Flags"><info><title>Command Options</title></info>
+
+ <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
+ Command Options</link>. Options that impact libstdc++ are
+ enumerated and detailed in the table below.
+ </para>
+
+ <para>
+ By default, <command>g++</command> is equivalent to <command>g++ -std=gnu++98</command>. The standard library also defaults to this dialect.
+ </para>
+
+ <table frame="all">
+<title>C++ Command Options</title>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+
+ <thead>
+ <row>
+ <entry>Option Flags</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><literal>-std=c++98</literal></entry>
+ <entry>Use the 1998 ISO C++ standard plus amendments.</entry>
+ </row>
+
+ <row>
+ <entry><literal>-std=gnu++98</literal></entry>
+ <entry>As directly above, with GNU extensions.</entry>
+ </row>
+
+ <row>
+ <entry><literal>-std=c++11</literal></entry>
+ <entry>Use the 2011 ISO C++ standard.</entry>
+ </row>
+
+ <row>
+ <entry><literal>-std=gnu++11</literal></entry>
+ <entry>As directly above, with GNU extensions.</entry>
+ </row>
+
+ <row>
+ <entry><literal>-fexceptions</literal></entry>
+ <entry>See <link linkend="intro.using.exception.no">exception-free dialect</link></entry>
+ </row>
+
+ <row>
+ <entry><literal>-frtti</literal></entry>
+ <entry>As above, but RTTI-free dialect.</entry>
+ </row>
+
+ <row>
+ <entry><literal>-pthread</literal> or <literal>-pthreads</literal></entry>
+ <entry>For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
+ &lt;mutex&gt;, or &lt;condition_variable&gt;.</entry>
+ </row>
+
+ <row>
+ <entry><literal>-fopenmp</literal></entry>
+ <entry>For <link linkend="manual.ext.parallel_mode">parallel</link> mode.</entry>
+ </row>
+ </tbody>
+
+</tgroup>
+</table>
+
+ </section>
+
+ <section xml:id="manual.intro.using.headers" xreflabel="Headers"><info><title>Headers</title></info>
+ <?dbhtml filename="using_headers.html"?>
+
+
+ <section xml:id="manual.intro.using.headers.all" xreflabel="Header Files"><info><title>Header Files</title></info>
+
+
+ <para>
+ 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
+ headers don't necessarily have to be in any kind of external
+ file. The only rule is that when one <code>#include</code>'s a
+ header, the contents of that header become available, no matter
+ how.
+ </para>
+
+ <para>
+ That said, in practice files are used.
+ </para>
+
+ <para>
+ There are two main types of include files: header files related
+ to a specific version of the ISO C++ standard (called Standard
+ Headers), and all others (TR1, C++ ABI, and Extensions).
+ </para>
+
+ <para>
+ Two dialects of standard headers are supported, corresponding to
+ the 1998 standard as updated for 2003, and the current 2011 standard.
+ </para>
+
+ <para>
+ C++98/03 include files. These are available in the default compilation mode, i.e. <code>-std=c++98</code> or <code>-std=gnu++98</code>.
+ </para>
+
+<table frame="all">
+<title>C++ 1998 Library Headers</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<tbody>
+<row>
+<entry><filename class="headerfile">algorithm</filename></entry>
+<entry><filename class="headerfile">bitset</filename></entry>
+<entry><filename class="headerfile">complex</filename></entry>
+<entry><filename class="headerfile">deque</filename></entry>
+<entry><filename class="headerfile">exception</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">fstream</filename></entry>
+<entry><filename class="headerfile">functional</filename></entry>
+<entry><filename class="headerfile">iomanip</filename></entry>
+<entry><filename class="headerfile">ios</filename></entry>
+<entry><filename class="headerfile">iosfwd</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">iostream</filename></entry>
+<entry><filename class="headerfile">istream</filename></entry>
+<entry><filename class="headerfile">iterator</filename></entry>
+<entry><filename class="headerfile">limits</filename></entry>
+<entry><filename class="headerfile">list</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">locale</filename></entry>
+<entry><filename class="headerfile">map</filename></entry>
+<entry><filename class="headerfile">memory</filename></entry>
+<entry><filename class="headerfile">new</filename></entry>
+<entry><filename class="headerfile">numeric</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ostream</filename></entry>
+<entry><filename class="headerfile">queue</filename></entry>
+<entry><filename class="headerfile">set</filename></entry>
+<entry><filename class="headerfile">sstream</filename></entry>
+<entry><filename class="headerfile">stack</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">stdexcept</filename></entry>
+<entry><filename class="headerfile">streambuf</filename></entry>
+<entry><filename class="headerfile">string</filename></entry>
+<entry><filename class="headerfile">utility</filename></entry>
+<entry><filename class="headerfile">typeinfo</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">valarray</filename></entry>
+<entry><filename class="headerfile">vector</filename></entry>
+</row>
+</tbody>
+</tgroup>
+</table>
+
+<para/>
+<table frame="all">
+<title>C++ 1998 Library Headers for C Library Facilities</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<tbody>
+<row>
+<entry><filename class="headerfile">cassert</filename></entry>
+<entry><filename class="headerfile">cerrno</filename></entry>
+<entry><filename class="headerfile">cctype</filename></entry>
+<entry><filename class="headerfile">cfloat</filename></entry>
+<entry><filename class="headerfile">ciso646</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">climits</filename></entry>
+<entry><filename class="headerfile">clocale</filename></entry>
+<entry><filename class="headerfile">cmath</filename></entry>
+<entry><filename class="headerfile">csetjmp</filename></entry>
+<entry><filename class="headerfile">csignal</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">cstdarg</filename></entry>
+<entry><filename class="headerfile">cstddef</filename></entry>
+<entry><filename class="headerfile">cstdio</filename></entry>
+<entry><filename class="headerfile">cstdlib</filename></entry>
+<entry><filename class="headerfile">cstring</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ctime</filename></entry>
+<entry><filename class="headerfile">cwchar</filename></entry>
+<entry><filename class="headerfile">cwctype</filename></entry>
+</row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+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++ 2011 Library Headers</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<tbody>
+
+<row>
+<entry><filename class="headerfile">algorithm</filename></entry>
+<entry><filename class="headerfile">array</filename></entry>
+<entry><filename class="headerfile">bitset</filename></entry>
+<entry><filename class="headerfile">chrono</filename></entry>
+<entry><filename class="headerfile">complex</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">condition_variable</filename></entry>
+<entry><filename class="headerfile">deque</filename></entry>
+<entry><filename class="headerfile">exception</filename></entry>
+<entry><filename class="headerfile">forward_list</filename></entry>
+<entry><filename class="headerfile">fstream</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">functional</filename></entry>
+<entry><filename class="headerfile">future</filename></entry>
+<entry><filename class="headerfile">initalizer_list</filename></entry>
+<entry><filename class="headerfile">iomanip</filename></entry>
+<entry><filename class="headerfile">ios</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">iosfwd</filename></entry>
+<entry><filename class="headerfile">iostream</filename></entry>
+<entry><filename class="headerfile">istream</filename></entry>
+<entry><filename class="headerfile">iterator</filename></entry>
+<entry><filename class="headerfile">limits</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">list</filename></entry>
+<entry><filename class="headerfile">locale</filename></entry>
+<entry><filename class="headerfile">map</filename></entry>
+<entry><filename class="headerfile">memory</filename></entry>
+<entry><filename class="headerfile">mutex</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">new</filename></entry>
+<entry><filename class="headerfile">numeric</filename></entry>
+<entry><filename class="headerfile">ostream</filename></entry>
+<entry><filename class="headerfile">queue</filename></entry>
+<entry><filename class="headerfile">random</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ratio</filename></entry>
+<entry><filename class="headerfile">regex</filename></entry>
+<entry><filename class="headerfile">set</filename></entry>
+<entry><filename class="headerfile">sstream</filename></entry>
+<entry><filename class="headerfile">stack</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">stdexcept</filename></entry>
+<entry><filename class="headerfile">streambuf</filename></entry>
+<entry><filename class="headerfile">string</filename></entry>
+<entry><filename class="headerfile">system_error</filename></entry>
+<entry><filename class="headerfile">thread</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">tuple</filename></entry>
+<entry><filename class="headerfile">type_traits</filename></entry>
+<entry><filename class="headerfile">typeinfo</filename></entry>
+<entry><filename class="headerfile">unordered_map</filename></entry>
+<entry><filename class="headerfile">unordered_set</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">utility</filename></entry>
+<entry><filename class="headerfile">valarray</filename></entry>
+<entry><filename class="headerfile">vector</filename></entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+
+<para/>
+
+<table frame="all">
+<title>C++ 2011 Library Headers for C Library Facilities</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<tbody>
+<row>
+<entry><filename class="headerfile">cassert</filename></entry>
+<entry><filename class="headerfile">ccomplex</filename></entry>
+<entry><filename class="headerfile">cctype</filename></entry>
+<entry><filename class="headerfile">cerrno</filename></entry>
+<entry><filename class="headerfile">cfenv</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">cfloat</filename></entry>
+<entry><filename class="headerfile">cinttypes</filename></entry>
+<entry><filename class="headerfile">ciso646</filename></entry>
+<entry><filename class="headerfile">climits</filename></entry>
+<entry><filename class="headerfile">clocale</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">cmath</filename></entry>
+<entry><filename class="headerfile">csetjmp</filename></entry>
+<entry><filename class="headerfile">csignal</filename></entry>
+<entry><filename class="headerfile">cstdarg</filename></entry>
+<entry><filename class="headerfile">cstdbool</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">cstddef</filename></entry>
+<entry><filename class="headerfile">cstdint</filename></entry>
+<entry><filename class="headerfile">cstdlib</filename></entry>
+<entry><filename class="headerfile">cstdio</filename></entry>
+<entry><filename class="headerfile">cstring</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ctgmath</filename></entry>
+<entry><filename class="headerfile">ctime</filename></entry>
+<entry><filename class="headerfile">cuchar</filename></entry>
+<entry><filename class="headerfile">cwchar</filename></entry>
+<entry><filename class="headerfile">cwctype</filename></entry>
+</row>
+</tbody>
+</tgroup>
+</table>
+
+
+<para>
+ In addition, TR1 includes as:
+</para>
+
+<table frame="all">
+<title>C++ TR 1 Library Headers</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<tbody>
+
+<row>
+<entry><filename class="headerfile">tr1/array</filename></entry>
+<entry><filename class="headerfile">tr1/complex</filename></entry>
+<entry><filename class="headerfile">tr1/memory</filename></entry>
+<entry><filename class="headerfile">tr1/functional</filename></entry>
+<entry><filename class="headerfile">tr1/random</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">tr1/regex</filename></entry>
+<entry><filename class="headerfile">tr1/tuple</filename></entry>
+<entry><filename class="headerfile">tr1/type_traits</filename></entry>
+<entry><filename class="headerfile">tr1/unordered_map</filename></entry>
+<entry><filename class="headerfile">tr1/unordered_set</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">tr1/utility</filename></entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+
+<para/>
+
+
+<table frame="all">
+<title>C++ TR 1 Library Headers for C Library Facilities</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<tbody>
+
+<row>
+<entry><filename class="headerfile">tr1/ccomplex</filename></entry>
+<entry><filename class="headerfile">tr1/cfenv</filename></entry>
+<entry><filename class="headerfile">tr1/cfloat</filename></entry>
+<entry><filename class="headerfile">tr1/cmath</filename></entry>
+<entry><filename class="headerfile">tr1/cinttypes</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">tr1/climits</filename></entry>
+<entry><filename class="headerfile">tr1/cstdarg</filename></entry>
+<entry><filename class="headerfile">tr1/cstdbool</filename></entry>
+<entry><filename class="headerfile">tr1/cstdint</filename></entry>
+<entry><filename class="headerfile">tr1/cstdio</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">tr1/cstdlib</filename></entry>
+<entry><filename class="headerfile">tr1/ctgmath</filename></entry>
+<entry><filename class="headerfile">tr1/ctime</filename></entry>
+<entry><filename class="headerfile">tr1/cwchar</filename></entry>
+<entry><filename class="headerfile">tr1/cwctype</filename></entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+
+
+<para>Decimal floating-point arithmetic is available if the C++
+compiler supports scalar decimal floating-point types defined via
+<code>__attribute__((mode(SD|DD|LD)))</code>.
+</para>
+
+<table frame="all">
+<title>C++ TR 24733 Decimal Floating-Point Header</title>
+
+<tgroup cols="1" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<tbody>
+<row>
+<entry><filename class="headerfile">decimal/decimal</filename></entry>
+</row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+ Also included are files for the C++ ABI interface:
+</para>
+
+<table frame="all">
+<title>C++ ABI Headers</title>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<tbody>
+<row><entry><filename class="headerfile">cxxabi.h</filename></entry><entry><filename class="headerfile">cxxabi_forced.h</filename></entry></row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+ And a large variety of extensions.
+</para>
+
+<table frame="all">
+<title>Extension Headers</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<tbody>
+
+<row>
+<entry><filename class="headerfile">ext/algorithm</filename></entry>
+<entry><filename class="headerfile">ext/atomicity.h</filename></entry>
+<entry><filename class="headerfile">ext/array_allocator.h</filename></entry>
+<entry><filename class="headerfile">ext/bitmap_allocator.h</filename></entry>
+<entry><filename class="headerfile">ext/cast.h</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ext/codecvt_specializations.h</filename></entry>
+<entry><filename class="headerfile">ext/concurrence.h</filename></entry>
+<entry><filename class="headerfile">ext/debug_allocator.h</filename></entry>
+<entry><filename class="headerfile">ext/enc_filebuf.h</filename></entry>
+<entry><filename class="headerfile">ext/extptr_allocator.h</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ext/functional</filename></entry>
+<entry><filename class="headerfile">ext/iterator</filename></entry>
+<entry><filename class="headerfile">ext/malloc_allocator.h</filename></entry>
+<entry><filename class="headerfile">ext/memory</filename></entry>
+<entry><filename class="headerfile">ext/mt_allocator.h</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ext/new_allocator.h</filename></entry>
+<entry><filename class="headerfile">ext/numeric</filename></entry>
+<entry><filename class="headerfile">ext/numeric_traits.h</filename></entry>
+<entry><filename class="headerfile">ext/pb_ds/assoc_container.h</filename></entry>
+<entry><filename class="headerfile">ext/pb_ds/priority_queue.h</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ext/pod_char_traits.h</filename></entry>
+<entry><filename class="headerfile">ext/pool_allocator.h</filename></entry>
+<entry><filename class="headerfile">ext/rb_tree</filename></entry>
+<entry><filename class="headerfile">ext/rope</filename></entry>
+<entry><filename class="headerfile">ext/slist</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ext/stdio_filebuf.h</filename></entry>
+<entry><filename class="headerfile">ext/stdio_sync_filebuf.h</filename></entry>
+<entry><filename class="headerfile">ext/throw_allocator.h</filename></entry>
+<entry><filename class="headerfile">ext/typelist.h</filename></entry>
+<entry><filename class="headerfile">ext/type_traits.h</filename></entry>
+</row>
+<row>
+<entry><filename class="headerfile">ext/vstring.h</filename></entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+
+<para/>
+
+<table frame="all">
+<title>Extension Debug Headers</title>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<tbody>
+
+<row>
+<entry><filename class="headerfile">debug/bitset</filename></entry>
+<entry><filename class="headerfile">debug/deque</filename></entry>
+<entry><filename class="headerfile">debug/list</filename></entry>
+<entry><filename class="headerfile">debug/map</filename></entry>
+<entry><filename class="headerfile">debug/set</filename></entry>
+</row>
+
+<row>
+<entry><filename class="headerfile">debug/string</filename></entry>
+<entry><filename class="headerfile">debug/unordered_map</filename></entry>
+<entry><filename class="headerfile">debug/unordered_set</filename></entry>
+<entry><filename class="headerfile">debug/vector</filename></entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+
+<para/>
+
+<table frame="all">
+<title>Extension Profile Headers</title>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<tbody>
+
+<row>
+<entry><filename class="headerfile">profile/bitset</filename></entry>
+<entry><filename class="headerfile">profile/deque</filename></entry>
+<entry><filename class="headerfile">profile/list</filename></entry>
+<entry><filename class="headerfile">profile/map</filename></entry>
+</row>
+
+<row>
+<entry><filename class="headerfile">profile/set</filename></entry>
+<entry><filename class="headerfile">profile/unordered_map</filename></entry>
+<entry><filename class="headerfile">profile/unordered_set</filename></entry>
+<entry><filename class="headerfile">profile/vector</filename></entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+
+<para/>
+
+<table frame="all">
+<title>Extension Parallel Headers</title>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<tbody>
+<row>
+<entry><filename class="headerfile">parallel/algorithm</filename></entry>
+<entry><filename class="headerfile">parallel/numeric</filename></entry>
+</row>
+</tbody>
+</tgroup>
+</table>
+
+ </section>
+
+ <section xml:id="manual.intro.using.headers.mixing" xreflabel="Mixing Headers"><info><title>Mixing Headers</title></info>
+
+
+<para> A few simple rules.
+</para>
+
+<para>First, mixing different dialects of the standard headers is not
+possible. It's an all-or-nothing affair. Thus, code like
+</para>
+
+<programlisting>
+#include &lt;array&gt;
+#include &lt;functional&gt;
+</programlisting>
+
+<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++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++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++11
+facilities. It is possible (although not especially prudent) to
+include both the TR1 version and the C++11 version of header in the
+same translation unit:
+</para>
+
+<programlisting>
+#include &lt;tr1/type_traits&gt;
+#include &lt;type_traits&gt;
+</programlisting>
+
+<para> Several parts of C++11 diverge quite substantially from TR1 predecessors.
+</para>
+ </section>
+
+ <section xml:id="manual.intro.using.headers.cheaders" xreflabel="C Headers and"><info><title>The C Headers and <code>namespace std</code></title></info>
+
+
+<para>
+ 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
+ namespace <code>std::</code> (but this is no longer a firm
+ requirement.) On the other hand, including the C++-style
+ header (&lt;cmath&gt;) guarantees that the entities will be
+ found in namespace std and perhaps in the global namespace.
+ </para>
+
+<para>
+Usage of C++-style headers is recommended, as then
+C-linkage names can be disambiguated by explicit qualification, such
+as by <code>std::abort</code>. In addition, the C++-style headers can
+use function overloading to provide a simpler interface to certain
+families of C-functions. For instance in &lt;cmath&gt;, the
+function <code>std::sin</code> has overloads for all the builtin
+floating-point types. This means that <code>std::sin</code> can be
+used uniformly, instead of a combination
+of <code>std::sinf</code>, <code>std::sin</code>,
+and <code>std::sinl</code>.
+</para>
+ </section>
+
+ <section xml:id="manual.intro.using.headers.pre" xreflabel="Precompiled Headers"><info><title>Precompiled Headers</title></info>
+
+
+
+<para>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.
+</para>
+
+
+<itemizedlist>
+<listitem>
+ <para>stdc++.h</para>
+<para>Includes all standard headers. Actual content varies depending on
+language dialect.
+</para>
+</listitem>
+
+<listitem>
+ <para>stdtr1c++.h</para>
+<para>Includes all of &lt;stdc++.h&gt;, and adds all the TR1 headers.
+</para>
+</listitem>
+
+<listitem><para>extc++.h</para>
+<para>Includes all of &lt;stdtr1c++.h&gt;, and adds all the Extension headers.
+</para></listitem>
+</itemizedlist>
+
+<para>How to construct a .gch file from one of these base header files.</para>
+
+<para>First, find the include directory for the compiler. One way to do
+this is:</para>
+
+<programlisting>
+g++ -v hello.cc
+
+#include &lt;...&gt; search starts here:
+ /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0
+...
+End of search list.
+</programlisting>
+
+
+<para>Then, create a precompiled header file with the same flags that
+will be used to compile other projects.</para>
+
+<programlisting>
+g++ -Winvalid-pch -x c++-header -g -O2 -o ./stdc++.h.gch /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0/x86_64-unknown-linux-gnu/bits/stdc++.h
+</programlisting>
+
+<para>The resulting file will be quite large: the current size is around
+thirty megabytes. </para>
+
+<para>How to use the resulting file.</para>
+
+<programlisting>
+g++ -I. -include stdc++.h -H -g -O2 hello.cc
+</programlisting>
+
+<para>Verification that the PCH file is being used is easy:</para>
+
+<programlisting>
+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
+</programlisting>
+
+<para>The exclamation point to the left of the <code>stdc++.h.gch</code> listing means that the generated PCH file was used.</para>
+<para/>
+
+<para> Detailed information about creating precompiled header files can be found in the GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html">documentation</link>.
+</para>
+
+ </section>
+ </section>
+
+
+ <section xml:id="manual.intro.using.macros" xreflabel="Macros"><info><title>Macros</title></info>
+ <?dbhtml filename="using_macros.html"?>
+
+
+ <para>
+ All library macros begin with <code>_GLIBCXX_</code>.
+ </para>
+
+ <para>
+ Furthermore, all pre-processor macros, switches, and
+ configuration options are gathered in the
+ file <filename class="headerfile">c++config.h</filename>, which
+ is generated during the libstdc++ configuration and build
+ process. This file is then included when needed by files part of
+ the public libstdc++ API, like &lt;ios&gt;. Most of these macros
+ should not be used by consumers of libstdc++, and are reserved
+ for internal implementation use. <emphasis>These macros cannot
+ be redefined</emphasis>.
+ </para>
+
+ <para>
+ A select handful of macros control libstdc++ extensions and extra
+ features, or provide versioning information for the API. Only
+ those macros listed below are offered for consideration by the
+ general public.
+ </para>
+
+ <para>Below is the macro which users may check for library version
+ information. </para>
+
+ <variablelist>
+ <varlistentry>
+ <term><code>__GLIBCXX__</code></term>
+ <listitem>
+ <para>The current version of
+ libstdc++ in compressed ISO date format, form of an unsigned
+ long. For details on the value of this particular macro for a
+ particular release, please consult this <link linkend="appendix.porting.abi">
+ document</link>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Below are the macros which users may change with #define/#undef or
+ with -D/-U compiler flags. The default state of the symbol is
+ listed.</para>
+
+ <para><quote>Configurable</quote> (or <quote>Not configurable</quote>) means
+ that the symbol is initially chosen (or not) based on
+ --enable/--disable options at library build and configure time
+ (documented <link linkend="manual.intro.setup.configure">here</link>), with the
+ various --enable/--disable choices being translated to
+ #define/#undef).
+ </para>
+
+ <para> <acronym>ABI</acronym> means that changing from the default value may
+ mean changing the <acronym>ABI</acronym> of compiled code. In other words, these
+ choices control code which has already been compiled (i.e., in a
+ binary such as libstdc++.a/.so). If you explicitly #define or
+ #undef these macros, the <emphasis>headers</emphasis> may see different code
+ paths, but the <emphasis>libraries</emphasis> which you link against will not.
+ Experimenting with different values with the expectation of
+ consistent linkage requires changing the config headers before
+ building/installing the library.
+ </para>
+
+ <variablelist>
+ <varlistentry><term><code>_GLIBCXX_USE_DEPRECATED</code></term>
+ <listitem>
+ <para>
+ Defined by default. Not configurable. ABI-changing. Turning this off
+ 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++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.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>_GLIBCXX_CONCEPT_CHECKS</code></term>
+ <listitem>
+ <para>
+ Undefined by default. Configurable via
+ <code>--enable-concept-checks</code>. When defined, performs
+ compile-time checking on certain template instantiations to
+ detect violations of the requirements of the standard. This
+ is described in more detail <link linkend="manual.ext.compile_checks">here</link>.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>_GLIBCXX_DEBUG</code></term>
+ <listitem>
+ <para>
+ Undefined by default. When defined, compiles user code using
+ the <link linkend="manual.ext.debug_mode">debug mode</link>.
+ </para>
+ </listitem></varlistentry>
+ <varlistentry><term><code>_GLIBCXX_DEBUG_PEDANTIC</code></term>
+ <listitem>
+ <para>
+ Undefined by default. When defined while compiling with
+ the <link linkend="manual.ext.debug_mode">debug mode</link>, makes
+ the debug mode extremely picky by making the use of libstdc++
+ extensions and libstdc++-specific behavior into errors.
+ </para>
+ </listitem></varlistentry>
+ <varlistentry><term><code>_GLIBCXX_PARALLEL</code></term>
+ <listitem>
+ <para>Undefined by default. When defined, compiles user code
+ using the <link linkend="manual.ext.parallel_mode">parallel
+ mode</link>.
+ </para>
+ </listitem></varlistentry>
+
+ <varlistentry><term><code>_GLIBCXX_PROFILE</code></term>
+ <listitem>
+ <para>Undefined by default. When defined, compiles user code
+ using the <link linkend="manual.ext.profile_mode">profile
+ mode</link>.
+ </para>
+ </listitem></varlistentry>
+ </variablelist>
+
+ </section>
+
+ <section xml:id="manual.intro.using.namespaces" xreflabel="Namespaces"><info><title>Namespaces</title></info>
+ <?dbhtml filename="using_namespaces.html"?>
+
+
+ <section xml:id="manual.intro.using.namespaces.all" xreflabel="Available Namespaces"><info><title>Available Namespaces</title></info>
+
+
+
+
+<para> There are three main namespaces.
+</para>
+
+<itemizedlist>
+ <listitem><para>std</para>
+<para>The ISO C++ standards specify that "all library entities are defined
+within namespace std." This includes namespaces nested
+within <code>namespace std</code>, such as <code>namespace
+std::tr1</code>.
+</para>
+</listitem>
+<listitem><para>abi</para>
+<para>Specified by the C++ ABI. This ABI specifies a number of type and
+function APIs supplemental to those required by the ISO C++ Standard,
+but necessary for interoperability.
+</para>
+</listitem>
+
+<listitem><para>__gnu_</para>
+<para>Indicating one of several GNU extensions. Choices
+include <code>__gnu_cxx</code>, <code>__gnu_debug</code>, <code>__gnu_parallel</code>,
+and <code>__gnu_pbds</code>.
+</para></listitem>
+</itemizedlist>
+
+<para> A complete list of implementation namespaces (including namespace contents) is available in the generated source <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html">documentation</link>.
+</para>
+
+
+ </section>
+
+ <section xml:id="manual.intro.using.namespaces.std" xreflabel="namespace std"><info><title>namespace std</title></info>
+
+
+
+<para>
+ One standard requirement is that the library components are defined
+ in <code>namespace std::</code>. Thus, in order to use these types or
+ functions, one must do one of two things:
+</para>
+
+<itemizedlist>
+ <listitem><para>put a kind of <emphasis>using-declaration</emphasis> in your source
+(either <code>using namespace std;</code> or i.e. <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.
+ </para></listitem> <listitem><para>use a <emphasis>fully
+qualified name</emphasis> for each library symbol
+(i.e. <code>std::string</code>, <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.)
+ </para>
+ </listitem>
+</itemizedlist>
+
+ </section>
+
+ <section xml:id="manual.intro.using.namespaces.comp" xreflabel="Using Namespace Composition"><info><title>Using Namespace Composition</title></info>
+
+
+<para>
+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
+the global namespace, as then name look-up can be explicitly enabled or
+disabled as above, symbols are consistently mangled without repetitive
+naming prefixes or macros, etc.
+</para>
+
+<para>For instance, consider a project that defines most of its classes in <code>namespace gtk</code>. It is possible to
+ adapt <code>namespace gtk</code> to <code>namespace std</code> by using a C++-feature called
+ <emphasis>namespace composition</emphasis>. This is what happens if
+ a <emphasis>using</emphasis>-declaration is put into a
+ namespace-definition: the imported symbol(s) gets imported into the
+ currently active namespace(s). For example:
+</para>
+<programlisting>
+namespace gtk
+{
+ using std::string;
+ using std::tr1::array;
+
+ class Window { ... };
+}
+</programlisting>
+<para>
+ In this example, <code>std::string</code> gets imported into
+ <code>namespace gtk</code>. The result is that use of
+ <code>std::string</code> inside namespace gtk can just use <code>string</code>, without the explicit qualification.
+ As an added bonus,
+ <code>std::string</code> does not get imported into
+ the global namespace. Additionally, a more elaborate arrangement can be made for backwards compatibility and portability, whereby the
+ <code>using</code>-declarations can wrapped in macros that
+ are set based on autoconf-tests to either "" or i.e. <code>using
+ std::string;</code> (depending on whether the system has
+ libstdc++ in <code>std::</code> or not). (ideas from
+ Llewelly and Karl Nelson)
+</para>
+
+
+ </section>
+ </section>
+
+ <section xml:id="manual.intro.using.linkage" xreflabel="Linkage"><info><title>Linking</title></info>
+ <?dbhtml filename="using_dynamic_or_shared.html"?>
+
+
+ <section xml:id="manual.intro.using.linkage.freestanding" xreflabel="Freestanding"><info><title>Almost Nothing</title></info>
+
+ <para>
+ 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:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <filename class="headerfile">cstdarg</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename class="headerfile">cstddef</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename class="headerfile">cstdlib</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename class="headerfile">exception</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename class="headerfile">limits</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename class="headerfile">new</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename class="headerfile">exception</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename class="headerfile">typeinfo</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ In addition, throw in
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <filename class="headerfile">cxxabi.h</filename>.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ In the
+ C++11 <link linkend="manual.intro.using.flags">dialect</link> add
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <filename class="headerfile">initializer_list</filename>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <filename class="headerfile">type_traits</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para> There exists a library that offers runtime support for
+ just these headers, and it is called
+ <filename class="libraryfile">libsupc++.a</filename>. To use it, compile with <command>gcc</command> instead of <command>g++</command>, like so:
+ </para>
+
+ <para>
+ <command>gcc foo.cc -lsupc++</command>
+ </para>
+
+ <para>
+ 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.
+ </para>
+ </section>
+
+ <section xml:id="manual.intro.using.linkage.dynamic" xreflabel="Dynamic and Shared"><info><title>Finding Dynamic or Shared Libraries</title></info>
+
+
+ <para>
+ If the only library built is the static library
+ (<filename class="libraryfile">libstdc++.a</filename>), or if
+ specifying static linking, this section is can be skipped. But
+ if building or using a shared library
+ (<filename class="libraryfile">libstdc++.so</filename>), then
+ additional location information will need to be provided.
+ </para>
+ <para>
+ But how?
+ </para>
+ <para>
+A quick read of the relevant part of the GCC
+ manual, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b">Compiling
+ C++ Programs</link>, specifies linking against a C++
+ library. More details from the
+ GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/faq.html#rpath">FAQ</link>,
+ which states <emphasis>GCC does not, by default, specify a
+ location so that the dynamic linker can find dynamic libraries at
+ runtime.</emphasis>
+ </para>
+ <para>
+ Users will have to provide this information.
+ </para>
+ <para>
+ Methods vary for different platforms and different styles, and
+ are printed to the screen during installation. To summarize:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ At runtime set <literal>LD_LIBRARY_PATH</literal> in your
+ environment correctly, so that the shared library for
+ libstdc++ can be found and loaded. Be certain that you
+ understand all of the other implications and behavior
+ of <literal>LD_LIBRARY_PATH</literal> first.
+ </para>
+
+ </listitem>
+ <listitem>
+ <para>
+ Compile the path to find the library at runtime into the
+ program. This can be done by passing certain options to
+ <command>g++</command>, which will in turn pass them on to
+ the linker. The exact format of the options is dependent on
+ which linker you use:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ GNU ld (default on GNU/Linux):
+ <literal>-Wl,-rpath,</literal><filename class="directory">destdir/lib</filename>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Solaris ld:
+ <literal>-Wl,-R</literal><filename class="directory">destdir/lib</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+ Some linkers allow you to specify the path to the library by
+ setting <literal>LD_RUN_PATH</literal> in your environment
+ when linking.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 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 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.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ Use the <command>ldd</command> utility on the linked executable
+ to show
+ which <filename class="libraryfile">libstdc++.so</filename>
+ library the system will get at runtime.
+ </para>
+ <para>
+ A <filename class="libraryfile">libstdc++.la</filename> file is
+ also installed, for use with Libtool. If you use Libtool to
+ create your executables, these details are taken care of for
+ you.
+ </para>
+ </section>
+ </section>
+
+
+ <section xml:id="manual.intro.using.concurrency" xreflabel="Concurrency"><info><title>Concurrency</title></info>
+ <?dbhtml filename="using_concurrency.html"?>
+
+
+ <para>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.
+ </para>
+
+ <section xml:id="manual.intro.using.concurrency.prereq" xreflabel="Thread Prereq"><info><title>Prerequisites</title></info>
+
+
+ <para>All normal disclaimers aside, multithreaded C++ application are
+ only supported when libstdc++ and all user code was built with
+ compilers which report (via <code> gcc/g++ -v </code>) the same thread
+ model and that model is not <emphasis>single</emphasis>. As long as your
+ final application is actually single-threaded, then it should be
+ safe to mix user code built with a thread model of
+ <emphasis>single</emphasis> with a libstdc++ and other C++ libraries built
+ with another thread model useful on the platform. Other mixes
+ may or may not work but are not considered supported. (Thus, if
+ you distribute a shared C++ library in binary form only, it may
+ be best to compile it with a GCC configured with
+ --enable-threads for maximal interchangeability and usefulness
+ with a user population that may have built GCC with either
+ --enable-threads or --disable-threads.)
+ </para>
+ <para>When you link a multithreaded application, you will probably
+ need to add a library or flag to g++. This is a very
+ non-standardized area of GCC across ports. Some ports support a
+ special flag (the spelling isn't even standardized yet) to add
+ all required macros to a compilation (if any such flags are
+ required then you must provide the flag for all compilations not
+ just linking) and link-library additions and/or replacements at
+ link time. The documentation is weak. Here is a quick summary
+ to display how ad hoc this is: On Solaris, both -pthreads and
+ -threads (with subtly different meanings) are 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).
+ </para>
+
+ </section>
+
+ <section xml:id="manual.intro.using.concurrency.thread_safety" xreflabel="Thread Safety"><info><title>Thread Safety</title></info>
+
+
+<para>
+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>
+
+
+ <para>The library strives to be thread-safe when all of the following
+ conditions are met:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>The system's libc is itself thread-safe,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The compiler in use reports a thread model other than
+ 'single'. This can be tested via output from <code>gcc
+ -v</code>. Multi-thread capable versions of gcc output
+ something like this:
+ </para>
+<programlisting>
+%gcc -v
+Using built-in specs.
+...
+Thread model: posix
+gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
+</programlisting>
+
+<para>Look for "Thread model" lines that aren't equal to "single."</para>
+ </listitem>
+ <listitem>
+ <para>
+ Requisite command-line flags are used for atomic operations
+ and threading. Examples of this include <code>-pthread</code>
+ and <code>-march=native</code>, although specifics vary
+ depending on the host environment. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html">Machine
+ Dependent Options</link>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ An implementation of atomicity.h functions
+ exists for the architecture in question. See the internals documentation for more <link linkend="internals.thread_safety">details</link>.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <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;
+
+ 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.</programlisting>
+ <para>Under the assumption that object_a and object_b are never exposed to
+ another thread, here is an example that does not require any
+ user-level locks:
+ </para>
+ <programlisting>
+ 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 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>
+
+ <para>
+ </para>
+ </section>
+
+ <section xml:id="manual.intro.using.concurrency.io" xreflabel="IO"><info><title>IO</title></info>
+
+ <para>This gets a bit tricky. Please read carefully, and bear with me.
+ </para>
+
+ <section xml:id="concurrency.io.structure" xreflabel="Structure"><info><title>Structure</title></info>
+
+ <para>A wrapper
+ type called <code>__basic_file</code> provides our abstraction layer
+ for the <code>std::filebuf</code> classes. Nearly all decisions dealing
+ with actual input and output must be made in <code>__basic_file</code>.
+ </para>
+ <para>A generic locking mechanism is somewhat in place at the filebuf layer,
+ 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).
+ </para>
+ </section>
+
+ <section xml:id="concurrency.io.defaults" xreflabel="Defaults"><info><title>Defaults</title></info>
+
+ <para>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>fopen</code>,
+ <code>fwrite</code>, and so forth.
+ </para>
+ <para>So, for 3.0, the question of "is multithreading safe for I/O"
+ must be answered with, "is your platform's C library threadsafe
+ for I/O?" Some are by default, some are not; many offer multiple
+ implementations of the C library with varying tradeoffs of threadsafety
+ and efficiency. You, the programmer, are always required to take care
+ with multiple threads.
+ </para>
+ <para>(As an example, the POSIX standard requires that C stdio FILE*
+ operations are atomic. POSIX-conforming C libraries (e.g, on Solaris
+ and GNU/Linux) have an internal mutex to serialize operations on
+ FILE*s. However, you still need to not do stupid things like calling
+ <code>fclose(fs)</code> in one thread followed by an access of
+ <code>fs</code> in another.)
+ </para>
+ <para>So, if your platform's C library is threadsafe, then your
+ <code>fstream</code> I/O operations will be threadsafe at the lowest
+ level. For higher-level operations, such as manipulating the data
+ contained in the stream formatting classes (e.g., setting up callbacks
+ inside an <code>std::ofstream</code>), you need to guard such accesses
+ like any other critical shared resource.
+ </para>
+ </section>
+
+ <section xml:id="concurrency.io.future" xreflabel="Future"><info><title>Future</title></info>
+
+ <para> 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.
+ </para>
+ <para>The libio code is a subset of the guts of the GNU libc (glibc) I/O
+ implementation. When libio is in use, the <code>__basic_file</code>
+ type is basically derived from FILE. (The real situation is more
+ complex than that... it's derived from an internal type used to
+ implement FILE. See libio/libioP.h to see scary things done with
+ vtbls.) The result is that there is no "layer" of C stdio
+ to go through; the filebuf makes calls directly into the same
+ functions used to implement <code>fread</code>, <code>fwrite</code>,
+ and so forth, using internal data structures. (And when I say
+ "makes calls directly," I mean the function is literally
+ replaced by a jump into an internal function. Fast but frightening.
+ *grin*)
+ </para>
+ <para>Also, the libio internal locks are used. This requires pulling in
+ large chunks of glibc, such as a pthreads implementation, and is one
+ of the issues preventing widespread use of libio as the libstdc++
+ cstdio implementation.
+ </para>
+ <para>But we plan to make this work, at least as an option if not a future
+ default. Platforms running a copy of glibc with a recent-enough
+ 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++.
+ </para>
+ </section>
+
+ <section xml:id="concurrency.io.alt" xreflabel="Alt"><info><title>Alternatives</title></info>
+
+ <para>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.
+ </para>
+ </section>
+
+ </section>
+
+ <section xml:id="manual.intro.using.concurrency.containers" xreflabel="Containers"><info><title>Containers</title></info>
+
+
+ <para>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
+ releases had a different approach to threading configuration and
+ proper compilation, the basic code design rules presented here
+ were similar. For information on all other aspects of
+ multithreading as it relates to libstdc++, including details on
+ the proper compilation of threaded code (and compatibility between
+ threaded and non-threaded code), see Chapter 17.
+ </para>
+ <para>Two excellent pages to read when working with the Standard C++
+ containers and threads are
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">SGI's
+ http://www.sgi.com/tech/stl/thread_safety.html</link> and
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/Allocators.html">SGI's
+ http://www.sgi.com/tech/stl/Allocators.html</link>.
+ </para>
+ <para><emphasis>However, please ignore all discussions about the user-level
+ configuration of the lock implementation inside the STL
+ container-memory allocator on those pages. For the sake of this
+ discussion, libstdc++ configures the SGI STL implementation,
+ not you. This is quite different from how gcc pre-3.0 worked.
+ In particular, past advice was for people using g++ to
+ explicitly define _PTHREADS or other macros or port-specific
+ compilation options on the command line to get a thread-safe
+ STL. This is no longer required for any port and should no
+ longer be done unless you really know what you are doing and
+ assume all responsibility.</emphasis>
+ </para>
+ <para>Since the container implementation of libstdc++ uses the SGI
+ code, we use the same definition of thread safety as SGI when
+ discussing design. A key point that beginners may miss is the
+ fourth major paragraph of the first page mentioned above
+ (<emphasis>For most clients...</emphasis>), which points out that
+ locking must nearly always be done outside the container, by
+ client code (that'd be you, not us). There is a notable
+ exceptions to this rule. Allocators called while a container or
+ element is constructed uses an internal lock obtained and
+ released solely within libstdc++ code (in fact, this is the
+ reason STL requires any knowledge of the thread configuration).
+ </para>
+ <para>For implementing a container which does its own locking, it is
+ trivial to provide a wrapper class which obtains the lock (as
+ SGI suggests), performs the container operation, and then
+ releases the lock. This could be templatized <emphasis>to a certain
+ extent</emphasis>, on the underlying container and/or a locking
+ mechanism. Trying to provide a catch-all general template
+ solution would probably be more trouble than it's worth.
+ </para>
+ <para>The library implementation may be configured to use the
+ high-speed caching memory allocator, which complicates thread
+ safety issues. For all details about how to globally override
+ this at application run-time
+ see <link linkend="manual.intro.using.macros">here</link>. Also
+ useful are details
+ on <link linkend="std.util.memory.allocator">allocator</link>
+ options and capabilities.
+ </para>
+
+ </section>
+</section>
+
+<!-- Section 0x : Exception policies, expectations, topics -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="using_exceptions.xml">
+</xi:include>
+
+<!-- Section 0x : Debug -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="debug.xml">
+</xi:include>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/using_exceptions.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/using_exceptions.xml
new file mode 100644
index 000000000..5eb002289
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/using_exceptions.xml
@@ -0,0 +1,543 @@
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.using.exceptions" xreflabel="Using Exceptions">
+<?dbhtml filename="using_exceptions.html"?>
+
+<info><title>Exceptions</title>
+ <keywordset>
+ <keyword>C++</keyword>
+ <keyword>exception</keyword>
+ <keyword>error</keyword>
+ <keyword>exception neutrality</keyword>
+ <keyword>exception safety</keyword>
+ <keyword>exception propagation</keyword>
+ <keyword>-fno-exceptions</keyword>
+ </keywordset>
+</info>
+
+<para>
+The C++ language provides language support for stack unwinding
+with <literal>try</literal> and <literal>catch</literal> blocks and
+the <literal>throw</literal> keyword.
+</para>
+
+<para>
+These are very powerful constructs, and require some thought when
+applied to the standard library in order to yield components that work
+efficiently while cleaning up resources when unexpectedly killed via
+exceptional circumstances.
+</para>
+
+<para>
+Two general topics of discussion follow:
+exception neutrality and exception safety.
+</para>
+
+
+<section xml:id="intro.using.exception.safety" xreflabel="Exception Safety"><info><title>Exception Safety</title></info>
+
+
+ <para>
+ What is exception-safe code?
+ </para>
+
+ <para>
+ Will define this as reasonable and well-defined behavior by classes
+ and functions from the standard library when used by user-defined
+ classes and functions that are themselves exception safe.
+ </para>
+
+ <para>
+ Please note that using exceptions in combination with templates
+ imposes an additional requirement for exception
+ safety. Instantiating types are required to have destructors that
+ do no throw.
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+<itemizedlist>
+
+ <listitem>
+ <para>
+ One. Don't throw.
+ </para>
+ <para>
+ As specified in 23.2.1 general container requirements. Applicable
+ to container and string classes.
+ </para>
+ <para>
+ Member
+ functions <function>erase</function>, <function>pop_back</function>, <function>pop_front</function>, <function>swap</function>, <function>clear</function>. And <type>iterator</type>
+ copy constructor and assignment operator.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Two. Don't leak resources when exceptions are thrown. This is
+ also referred to as the <quote>basic</quote> exception safety guarantee.
+ </para>
+
+ <para>
+ This applicable throughout the standard library.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Three. Commit-or-rollback semantics. This is
+ referred to as <quote>strong</quote> exception safety guarantee.
+ </para>
+
+ <para>
+ As specified in 23.2.1 general container requirements. Applicable
+ to container and string classes.
+ </para>
+ <para>
+ Member functions <function>insert</function> of a single
+ element, <function>push_back</function>, <function>push_front</function>,
+ and <function>rehash</function>.
+ </para>
+
+ </listitem>
+</itemizedlist>
+
+</section>
+
+
+<section xml:id="intro.using.exception.propagating" xreflabel="Exceptions Neutrality"><info><title>Exception Neutrality</title></info>
+
+ <para>
+ 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
+ gratuitous <literal>catch(...)</literal> blocks. Instead,
+ matching <literal>try</literal> and <literal>catch</literal>
+ blocks should have specific catch handlers and allow un-handed
+ exception objects to propagate. If a
+ terminating <literal>catch(...)</literal> blocks exist then it
+ should end with a <literal>throw</literal> to re-throw the current
+ exception.
+ </para>
+
+ <para>
+ Why do this?
+ </para>
+
+ <para>
+ By allowing exception objects to propagate, a more flexible
+ approach to error handling is made possible (although not
+ required.) Instead of dealing with an error immediately, one can
+ allow the exception to propagate up until sufficient context is
+ available and the choice of exiting or retrying can be made in an
+ informed manner.
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ Input/Output
+ </para>
+ <para>
+ The destructor <function>ios_base::Init::~Init()</function>
+ swallows all exceptions from <function>flush</function> called on
+ all open streams at termination.
+ </para>
+
+ <para>
+ All formatted input in <classname>basic_istream</classname> or
+ formatted output in <classname>basic_ostream</classname> can be
+ configured to swallow exceptions
+ when <function>exceptions</function> is set to
+ ignore <type>ios_base::badbit</type>.
+ </para>
+
+ <para>
+ Functions that have been registered
+ with <function>ios_base::register_callback</function> swallow all
+ exceptions when called as part of a callback event.
+ </para>
+
+ <para>
+ When closing the underlying
+ file, <function>basic_filebuf::close</function> will swallow
+ (non-cancellation) exceptions thrown and return <literal>NULL</literal>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Thread
+ </para>
+ <para>
+ The constructors of <classname>thread</classname> that take a
+ callable function argument swallow all exceptions resulting from
+ executing the function argument.
+ </para>
+ </listitem>
+</itemizedlist>
+
+</section>
+
+<section xml:id="intro.using.exception.no" xreflabel="-fno-exceptions"><info><title>Doing without</title></info>
+
+ <para>
+ 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
+ not impose hidden or unexpected costs. The GNU system tries to be
+ as flexible and as configurable as possible. So, it should come as
+ no surprise that GNU C++ provides an optional language extension,
+ spelled <literal>-fno-exceptions</literal>, as a way to excise the
+ implicitly generated magic necessary to
+ support <literal>try</literal> and <literal>catch</literal> blocks
+ and thrown objects. (Language support
+ for <literal>-fno-exceptions</literal> is documented in the GNU
+ GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options">manual</link>.)
+ </para>
+
+ <para>Before detailing the library support
+ for <literal>-fno-exceptions</literal>, first a passing note on
+ the things lost when this flag is used: it will break exceptions
+ trying to pass through code compiled
+ with <literal>-fno-exceptions</literal> whether or not that code
+ has any <literal>try</literal> or <literal>catch</literal>
+ constructs. If you might have some code that throws, you shouldn't
+ use <literal>-fno-exceptions</literal>. If you have some code that
+ uses <literal>try</literal> or <literal>catch</literal>, you
+ shouldn't use <literal>-fno-exceptions</literal>.
+ </para>
+
+ <para>
+ And what it to be gained, tinkering in the back alleys with a
+ language like this? Exception handling overhead can be measured
+ in the size of the executable binary, and varies with the
+ capabilities of the underlying operating system and specific
+ configuration of the C++ compiler. On recent hardware with GNU
+ system software of the same age, the combined code and data size
+ overhead for enabling exception handling is around 7%. Of course,
+ if code size is of singular concern than using the appropriate
+ optimizer setting with exception handling enabled
+ (ie, <literal>-Os -fexceptions</literal>) may save up to twice
+ that, and preserve error checking.
+ </para>
+
+ <para>
+ So. Hell bent, we race down the slippery track, knowing the brakes
+ are a little soft and that the right front wheel has a tendency to
+ wobble at speed. Go on: detail the standard library support
+ for <literal>-fno-exceptions</literal>.
+ </para>
+
+ <para>
+ In sum, valid C++ code with exception handling is transformed into
+ a dialect without exception handling. In detailed steps: all use
+ of the C++
+ keywords <literal>try</literal>, <literal>catch</literal>,
+ and <literal>throw</literal> in the standard library have been
+ permanently replaced with the pre-processor controlled equivalents
+ spelled <literal>__try</literal>, <literal>__catch</literal>,
+ and <literal>__throw_exception_again</literal>. They are defined
+ as follows.
+ </para>
+
+<programlisting>
+#ifdef __EXCEPTIONS
+# define __try try
+# define __catch(X) catch(X)
+# define __throw_exception_again throw
+#else
+# define __try if (true)
+# define __catch(X) if (false)
+# define __throw_exception_again
+#endif
+</programlisting>
+
+<para>
+ In addition, for every object derived from
+ class <classname>exception</classname>, there exists a corresponding
+ function with C language linkage. An example:
+</para>
+
+<programlisting>
+#ifdef __EXCEPTIONS
+ void __throw_bad_exception(void)
+ { throw bad_exception(); }
+#else
+ void __throw_bad_exception(void)
+ { abort(); }
+#endif
+</programlisting>
+
+<para>
+ The last language feature needing to be transformed
+ by <literal>-fno-exceptions</literal> is treatment of exception
+ specifications on member functions. Fortunately, the compiler deals
+ with this by ignoring exception specifications and so no alternate
+ source markup is needed.
+</para>
+
+<para>
+ By using this combination of language re-specification by the
+ compiler, and the pre-processor tricks and the functional
+ indirection layer for thrown exception objects by the library,
+ libstdc++ files can be compiled
+ with <literal>-fno-exceptions</literal>.
+</para>
+
+<para>
+ User code that uses C++ keywords
+ like <literal>throw</literal>, <literal>try</literal>,
+ and <literal>catch</literal> will produce errors even if the user
+ code has included libstdc++ headers and is using constructs
+ like <classname>basic_iostream</classname>. Even though the standard
+ library has been transformed, user code may need modification. User
+ code that attempts or expects to do error checking on standard
+ library components compiled with exception handling disabled should
+ be evaluated and potentially made conditional.
+</para>
+
+<para>
+ Some issues remain with this approach (see bugzilla entry
+ 25191). Code paths are not equivalent, in
+ particular <literal>catch</literal> blocks are not evaluated. Also
+ problematic are <literal>throw</literal> expressions expecting a
+ user-defined throw handler. Known problem areas in the standard
+ library include using an instance
+ of <classname>basic_istream</classname>
+ with <function>exceptions</function> set to specific
+ <type>ios_base::iostate</type> conditions, or
+ cascading <literal>catch</literal> blocks that dispatch error
+ handling or recovery efforts based on the type of exception object
+ thrown.
+</para>
+
+<para>
+ Oh, and by the way: none of this hackery is at all
+ special. (Although perhaps well-deserving of a raised eyebrow.)
+ Support continues to evolve and may change in the future. Similar
+ and even additional techniques are used in other C++ libraries and
+ compilers.
+</para>
+
+<para>
+ C++ hackers with a bent for language and control-flow purity have
+ been successfully consoled by grizzled C veterans lamenting the
+ substitution of the C language keyword
+ <literal>const</literal> with the uglified
+ doppelganger <literal>__const</literal>.
+</para>
+
+
+</section>
+
+<section xml:id="intro.using.exception.compat"><info><title>Compatibility</title></info>
+
+
+<section xml:id="using.exception.compat.c"><info><title>With <literal>C</literal></title></info>
+
+<para>
+ C language code that is expecting to interoperate with C++ should be
+ compiled with <literal>-fexceptions</literal>. This will make
+ debugging a C language function called as part of C++-induced stack
+ unwinding possible.
+</para>
+
+<para>
+ In particular, unwinding into a frame with no exception handling
+data will cause a runtime abort. If the unwinder runs out of unwind
+info before it finds a handler, <function>std::terminate()</function>
+is called.
+</para>
+
+<para>
+ Please note that most development environments should take care of
+ getting these details right. For GNU systems, all appropriate parts
+ of the GNU C library are already compiled
+ with <literal>-fexceptions</literal>.
+</para>
+
+</section>
+
+<section xml:id="using.exception.compat.posix"><info><title>With <literal>POSIX</literal> thread cancellation</title></info>
+
+
+<para>
+ GNU systems re-use some of the exception handling mechanisms to
+ track control flow for <literal>POSIX</literal> thread cancellation.
+</para>
+
+<para>
+ Cancellation points are functions defined by POSIX as worthy of
+ special treatment. The standard library may use some of these
+ functions to implement parts of the ISO C++ standard or depend on
+ them for extensions.
+</para>
+
+<para>
+ Of note:
+</para>
+
+<para>
+ <function>nanosleep</function>,
+ <function>read</function>, <function>write</function>, <function>open</function>, <function>close</function>,
+ and <function>wait</function>.
+</para>
+
+<para>
+ The parts of libstdc++ that use C library functions marked as
+ cancellation points should take pains to be exception neutral.
+ Failing this, <literal>catch</literal> blocks have been augmented to
+ show that the POSIX cancellation object is in flight.
+</para>
+
+<para>
+ This augmentation adds a <literal>catch</literal> block
+ for <classname>__cxxabiv1::__forced_unwind</classname>, which is the
+ object representing the POSIX cancellation object. Like so:
+</para>
+
+<programlisting>
+ catch(const __cxxabiv1::__forced_unwind&amp;)
+ {
+ this-&gt;_M_setstate(ios_base::badbit);
+ throw;
+ }
+ catch(...)
+ { this-&gt;_M_setstate(ios_base::badbit); }
+</programlisting>
+
+
+</section>
+</section>
+
+<bibliography xml:id="using.exceptions.biblio"><info><title>Bibliography</title></info>
+
+
+ <biblioentry>
+ <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)
+ </link>
+ </title>
+
+
+ <pagenums>
+ 2.9.5 Thread Cancellation
+ </pagenums>
+ <copyright>
+ <year>2008</year>
+ <holder>
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+ </holder>
+ </copyright>
+ </biblioentry>
+
+ <biblioentry>
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.boost.org/community/error_handling.html">
+ Error and Exception Handling
+ </link>
+ </title>
+
+ <author><personname><firstname>David</firstname><surname>Abrahams </surname></personname></author>
+ <publisher>
+ <publishername>
+ Boost
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <author><personname><firstname>David</firstname><surname>Abrahams</surname></personname></author>
+ <publisher>
+ <publishername>
+ Boost
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <author><personname><firstname>Matt</firstname><surname>Austern</surname></personname></author>
+ <publisher>
+ <publishername>
+ WG21 N1077
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+
+ <author><personname><firstname>Richard</firstname><surname>Henderson</surname></personname></author>
+ <publisher>
+ <publishername>
+ GNU
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+ <author><personname><firstname>Bjarne</firstname><surname>Stroustrup</surname></personname></author>
+ </biblioentry>
+
+ <biblioentry>
+ <citetitle>
+ Exceptional C++
+ </citetitle>
+ <pagenums>
+ Exception-Safety Issues and Techniques
+ </pagenums>
+ <author><personname><firstname>Herb</firstname><surname>Sutter</surname></personname></author>
+ </biblioentry>
+
+ <biblioentry>
+ <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
+ </link>
+ </title>
+ </biblioentry>
+
+</bibliography>
+
+</section>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/manual/utilities.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/utilities.xml
new file mode 100644
index 000000000..6a4a792ca
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/manual/utilities.xml
@@ -0,0 +1,119 @@
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.util" xreflabel="Utilities">
+<?dbhtml filename="utilities.html"?>
+
+<info><title>
+ Utilities
+ <indexterm><primary>Utilities</primary></indexterm>
+</title>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+</info>
+
+
+
+<!-- Section 01 : Functors -->
+<section xml:id="std.util.functors" xreflabel="Functors"><info><title>Functors</title></info>
+<?dbhtml filename="functors.html"?>
+
+ <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 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>
+</section>
+
+<!-- Section 02 : Pairs -->
+<section xml:id="std.util.pairs" xreflabel="Pairs"><info><title>Pairs</title></info>
+<?dbhtml filename="pairs.html"?>
+
+ <para>The <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
+ <code>.first</code> and <code>.second</code>.
+ </para>
+ <para>Construction is simple. The default ctor initializes each member
+ with its respective default ctor. The other simple ctor,
+ </para>
+ <programlisting>
+ pair (const T1&amp; x, const T2&amp; y);
+ </programlisting>
+ <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 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);
+ </programlisting>
+ <para>The compiler will convert as necessary from U to T1 and from
+ V to T2 in order to perform the respective initializations.
+ </para>
+ <para>The comparison operators are done for you. Equality
+ of two <code>pair&lt;T1,T2&gt;</code>s is defined as both <code>first</code>
+ members comparing equal and both <code>second</code> members comparing
+ equal; this simply delegates responsibility to the respective
+ <code>operator==</code> functions (for types like MyClass) or builtin
+ comparisons (for types like int, char, etc).
+ </para>
+ <para>
+ The less-than operator is a bit odd the first time you see it. It
+ is defined as evaluating to:
+ </para>
+ <programlisting>
+ x.first &lt; y.first ||
+ ( !(y.first &lt; x.first) &amp;&amp; x.second &lt; y.second )
+ </programlisting>
+ <para>The other operators are not defined using the <code>rel_ops</code>
+ functions above, but their semantics are the same.
+ </para>
+ <para>Finally, there is a template function called <function>make_pair</function>
+ that takes two references-to-const objects and returns an
+ instance of a pair instantiated on their respective types:
+ </para>
+ <programlisting>
+ pair&lt;int,MyClass&gt; p = make_pair(4,myobject);
+ </programlisting>
+
+</section>
+
+<!-- Section 03 : Memory -->
+<section xml:id="std.util.memory" xreflabel="Memory"><info><title>Memory</title></info>
+<?dbhtml filename="memory.html"?>
+
+ <para>
+ Memory contains three general areas. First, function and operator
+ calls via <function>new</function> and <function>delete</function>
+ operator or member function calls. Second, allocation via
+ <classname>allocator</classname>. And finally, smart pointer and
+ intelligent pointer abstractions.
+ </para>
+
+ <!-- Section 01 : allocator -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="allocator.xml">
+ </xi:include>
+
+ <!-- Section 02 : auto_ptr -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="auto_ptr.xml">
+ </xi:include>
+
+ <!-- Section 03 : shared_ptr -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="shared_ptr.xml">
+ </xi:include>
+
+</section>
+
+<!-- Section 04 : Traits -->
+<section xml:id="std.util.traits" xreflabel="Traits"><info><title>Traits</title></info>
+<?dbhtml filename="traits.html"?>
+
+ <para>
+ </para>
+</section>
+
+</chapter>
diff --git a/gcc-4.8.3/libstdc++-v3/doc/xml/spine.xml b/gcc-4.8.3/libstdc++-v3/doc/xml/spine.xml
new file mode 100644
index 000000000..2a17a5150
--- /dev/null
+++ b/gcc-4.8.3/libstdc++-v3/doc/xml/spine.xml
@@ -0,0 +1,75 @@
+<set xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="set-index"
+ xreflabel="The GNU C++ Library">
+<title>The GNU C++ Library</title>
+<?dbhtml filename="index.html"?>
+
+<info>
+ <keywordset>
+ <keyword>ISO C++</keyword>
+ <keyword>runtime</keyword>
+ <keyword>library</keyword>
+ </keywordset>
+ <abstract xml:id="contents">
+ <title>Short Contents</title>
+
+ <para>
+ Copyright (C) 2008-2013
+ <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>
+
+
+<!-- User Manual -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="manual/spine.xml" parse="xml">
+</xi:include>
+
+<!-- Source Level Documentation-->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="api.xml" parse="xml">
+</xi:include>
+
+<!-- FAQ -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="faq.xml" parse="xml">
+</xi:include>
+
+</set>