diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-05-13 11:50:21 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-05-13 11:50:21 +0100 |
commit | 544be2beb1fa53dfdd6988418ad3b365c289536d (patch) | |
tree | c835ee9f02ea205cc796f42a7dbf889fe28560c8 | |
parent | 0d09ca2550da86793e9bcc2820524fc4d6486e74 (diff) | |
download | gcc-544be2beb1fa53dfdd6988418ad3b365c289536d.tar.gz |
Remove Profile Mode, deprecated since GCC 7.1
The Profile Mode extension is not used by anybody, nor maintained by
anybody. The containers do not support the full API specified in recent
standards, and so enabling Profile Mode is not source compatible with
much modern C++ code. The heuristics that would check the profile
information and make useful suggestions never materialized, so it isn't
useful.
It should be removed.
Remove Profile Mode, deprecated since 7.1.0
* doc/Makefile.am: Remove XML file for profile mode docs.
* doc/Makefile.in: Regenerate.
* doc/xml/authors.xml: Remove authors of profile mode docs.
* doc/xml/manual/appendix_contributing.xml: Remove mention of profile
mode.
* doc/xml/manual/debug.xml: Likewise.
* doc/xml/manual/evolution.xml: Document removal of profile mode.
* doc/xml/manual/profile_mode.xml: Remove profile mode docs.
* doc/xml/manual/spine.xml: Remove profile mode author credit.
* doc/xml/manual/test.xml: Remove docs for dg-require-profile-mode
directive.
* doc/xml/manual/using.xml: Remove docs for profile mode headers and
macro.
* doc/html/*: Regenerate.
* include/Makefile.am: Remove profile mode headers.
* include/Makefile.in: Regenerate.
* include/bits/c++config (std::__profile): Remove namespace.
[_GLIBCXX_PROFILE]: Remove checks for macro.
* include/profile/array: Remove.
* include/profile/base.h: Remove.
* include/profile/bitset: Remove.
* include/profile/deque: Remove.
* include/profile/forward_list: Remove.
* include/profile/impl/profiler.h: Remove.
* include/profile/impl/profiler_algos.h: Remove.
* include/profile/impl/profiler_container_size.h: Remove.
* include/profile/impl/profiler_hash_func.h: Remove.
* include/profile/impl/profiler_hashtable_size.h: Remove.
* include/profile/impl/profiler_list_to_slist.h: Remove.
* include/profile/impl/profiler_list_to_vector.h: Remove.
* include/profile/impl/profiler_map_to_unordered_map.h: Remove.
* include/profile/impl/profiler_node.h: Remove.
* include/profile/impl/profiler_state.h: Remove.
* include/profile/impl/profiler_trace.h: Remove.
* include/profile/impl/profiler_vector_size.h: Remove.
* include/profile/impl/profiler_vector_to_list.h: Remove.
* include/profile/iterator_tracker.h: Remove.
* include/profile/list: Remove.
* include/profile/map: Remove.
* include/profile/map.h: Remove.
* include/profile/multimap.h: Remove.
* include/profile/multiset.h: Remove.
* include/profile/ordered_base.h: Remove.
* include/profile/set: Remove.
* include/profile/set.h: Remove.
* include/profile/unordered_base.h: Remove.
* include/profile/unordered_map: Remove.
* include/profile/unordered_set: Remove.
* include/profile/vector: Remove.
* scripts/run_doxygen: Do not process profile mode headers.
* testsuite/23_containers/array/element_access/60497.cc: Don't use
profile mode type.
* testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc:
Remove dg-skip-if for profile mode.
* testsuite/23_containers/forward_list/capacity/1.cc: Remove
preprocessor check for profile mode.
* testsuite/23_containers/list/capacity/29134.cc: Likewise.
* testsuite/23_containers/map/modifiers/extract.cc: Remove dg-skip-if
for profile mode.
* testsuite/23_containers/map/modifiers/insert_or_assign/1.cc:
Likewise.
* testsuite/23_containers/map/modifiers/try_emplace/1.cc: Likewise.
* testsuite/23_containers/multimap/modifiers/extract.cc: Likewise.
* testsuite/23_containers/multiset/modifiers/extract.cc: Likewise.
* testsuite/23_containers/set/modifiers/extract.cc: Likewise.
* testsuite/23_containers/unordered_map/modifiers/extract.cc:
Likewise.
* testsuite/23_containers/unordered_multimap/modifiers/extract.cc:
Likewise.
* testsuite/23_containers/unordered_multiset/modifiers/extract.cc:
Likewise.
* testsuite/23_containers/unordered_set/modifiers/extract.cc:
Likewise.
* testsuite/23_containers/vector/bool/capacity/29134.cc: Remove
preprocessor check for profile mode.
* testsuite/23_containers/vector/bool/modifiers/insert/31370.cc:
Likewise.
* testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc:
Remove dg-skip-if for profile mode.
* testsuite/25_algorithms/binary_search/partitioned.cc: Likewise.
* testsuite/25_algorithms/equal_range/partitioned.cc: Likewise.
* testsuite/25_algorithms/lexicographical_compare/71545.cc: Likewise.
* testsuite/25_algorithms/lower_bound/partitioned.cc: Likewise.
* testsuite/25_algorithms/upper_bound/partitioned.cc: Likewise.
* testsuite/Makefile.am: Remove profile_flags variable and
* testsuite/Makefile.am: Remove profile_flags variable and
check-profile target.
* testsuite/Makefile.in: Regenerate.
* testsuite/ext/profile/all.cc: Remove.
* testsuite/ext/profile/mutex_extensions_neg.cc: Remove.
* testsuite/ext/profile/profiler_algos.cc: Remove.
* testsuite/ext/profile/replace_new.cc: Remove.
* testsuite/ext/throw_allocator/deallocate_global.cc: Remove
preprocessor check for profile mode.
* testsuite/ext/throw_allocator/deallocate_local.cc: Likewise.
* testsuite/lib/libstdc++.exp (check_v3_target_profile_mode): Remove.
(check_v3_target_normal_mode): Do not check for profile mode macro.
* testsuite/libstdc++-prettyprinters/80276.cc: Remove dg-skip-if for
profile mode.
* testsuite/libstdc++-prettyprinters/compat.cc: Likewise.
* testsuite/libstdc++-prettyprinters/cxx11.cc: Likewise.
* testsuite/libstdc++-prettyprinters/cxx17.cc: Likewise.
* testsuite/libstdc++-prettyprinters/debug.cc: Likewise.
* testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Likewise.
* testsuite/libstdc++-prettyprinters/libfundts.cc: Likewise.
* testsuite/libstdc++-prettyprinters/simple.cc: Likewise.
* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
* testsuite/libstdc++-prettyprinters/whatis.cc: Likewise.
* testsuite/libstdc++-prettyprinters/whatis2.cc: Likewise.
From-SVN: r271120
130 files changed, 282 insertions, 12111 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2869dafa810..1a9431bbbb5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,116 @@ 2019-05-11 Jonathan Wakely <jwakely@redhat.com> + Remove Profile Mode, deprecated since 7.1.0 + * doc/Makefile.am: Remove XML file for profile mode docs. + * doc/Makefile.in: Regenerate. + * doc/xml/authors.xml: Remove authors of profile mode docs. + * doc/xml/manual/appendix_contributing.xml: Remove mention of profile + mode. + * doc/xml/manual/debug.xml: Likewise. + * doc/xml/manual/evolution.xml: Document removal of profile mode. + * doc/xml/manual/profile_mode.xml: Remove profile mode docs. + * doc/xml/manual/spine.xml: Remove profile mode author credit. + * doc/xml/manual/test.xml: Remove docs for dg-require-profile-mode + directive. + * doc/xml/manual/using.xml: Remove docs for profile mode headers and + macro. + * doc/html/*: Regenerate. + * include/Makefile.am: Remove profile mode headers. + * include/Makefile.in: Regenerate. + * include/bits/c++config (std::__profile): Remove namespace. + [_GLIBCXX_PROFILE]: Remove checks for macro. + * include/profile/array: Remove. + * include/profile/base.h: Remove. + * include/profile/bitset: Remove. + * include/profile/deque: Remove. + * include/profile/forward_list: Remove. + * include/profile/impl/profiler.h: Remove. + * include/profile/impl/profiler_algos.h: Remove. + * include/profile/impl/profiler_container_size.h: Remove. + * include/profile/impl/profiler_hash_func.h: Remove. + * include/profile/impl/profiler_hashtable_size.h: Remove. + * include/profile/impl/profiler_list_to_slist.h: Remove. + * include/profile/impl/profiler_list_to_vector.h: Remove. + * include/profile/impl/profiler_map_to_unordered_map.h: Remove. + * include/profile/impl/profiler_node.h: Remove. + * include/profile/impl/profiler_state.h: Remove. + * include/profile/impl/profiler_trace.h: Remove. + * include/profile/impl/profiler_vector_size.h: Remove. + * include/profile/impl/profiler_vector_to_list.h: Remove. + * include/profile/iterator_tracker.h: Remove. + * include/profile/list: Remove. + * include/profile/map: Remove. + * include/profile/map.h: Remove. + * include/profile/multimap.h: Remove. + * include/profile/multiset.h: Remove. + * include/profile/ordered_base.h: Remove. + * include/profile/set: Remove. + * include/profile/set.h: Remove. + * include/profile/unordered_base.h: Remove. + * include/profile/unordered_map: Remove. + * include/profile/unordered_set: Remove. + * include/profile/vector: Remove. + * scripts/run_doxygen: Do not process profile mode headers. + * testsuite/23_containers/array/element_access/60497.cc: Don't use + profile mode type. + * testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc: + Remove dg-skip-if for profile mode. + * testsuite/23_containers/forward_list/capacity/1.cc: Remove + preprocessor check for profile mode. + * testsuite/23_containers/list/capacity/29134.cc: Likewise. + * testsuite/23_containers/map/modifiers/extract.cc: Remove dg-skip-if + for profile mode. + * testsuite/23_containers/map/modifiers/insert_or_assign/1.cc: + Likewise. + * testsuite/23_containers/map/modifiers/try_emplace/1.cc: Likewise. + * testsuite/23_containers/multimap/modifiers/extract.cc: Likewise. + * testsuite/23_containers/multiset/modifiers/extract.cc: Likewise. + * testsuite/23_containers/set/modifiers/extract.cc: Likewise. + * testsuite/23_containers/unordered_map/modifiers/extract.cc: + Likewise. + * testsuite/23_containers/unordered_multimap/modifiers/extract.cc: + Likewise. + * testsuite/23_containers/unordered_multiset/modifiers/extract.cc: + Likewise. + * testsuite/23_containers/unordered_set/modifiers/extract.cc: + Likewise. + * testsuite/23_containers/vector/bool/capacity/29134.cc: Remove + preprocessor check for profile mode. + * testsuite/23_containers/vector/bool/modifiers/insert/31370.cc: + Likewise. + * testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc: + Remove dg-skip-if for profile mode. + * testsuite/25_algorithms/binary_search/partitioned.cc: Likewise. + * testsuite/25_algorithms/equal_range/partitioned.cc: Likewise. + * testsuite/25_algorithms/lexicographical_compare/71545.cc: Likewise. + * testsuite/25_algorithms/lower_bound/partitioned.cc: Likewise. + * testsuite/25_algorithms/upper_bound/partitioned.cc: Likewise. + * testsuite/Makefile.am: Remove profile_flags variable and + * testsuite/Makefile.am: Remove profile_flags variable and + check-profile target. + * testsuite/Makefile.in: Regenerate. + * testsuite/ext/profile/all.cc: Remove. + * testsuite/ext/profile/mutex_extensions_neg.cc: Remove. + * testsuite/ext/profile/profiler_algos.cc: Remove. + * testsuite/ext/profile/replace_new.cc: Remove. + * testsuite/ext/throw_allocator/deallocate_global.cc: Remove + preprocessor check for profile mode. + * testsuite/ext/throw_allocator/deallocate_local.cc: Likewise. + * testsuite/lib/libstdc++.exp (check_v3_target_profile_mode): Remove. + (check_v3_target_normal_mode): Do not check for profile mode macro. + * testsuite/libstdc++-prettyprinters/80276.cc: Remove dg-skip-if for + profile mode. + * testsuite/libstdc++-prettyprinters/compat.cc: Likewise. + * testsuite/libstdc++-prettyprinters/cxx11.cc: Likewise. + * testsuite/libstdc++-prettyprinters/cxx17.cc: Likewise. + * testsuite/libstdc++-prettyprinters/debug.cc: Likewise. + * testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Likewise. + * testsuite/libstdc++-prettyprinters/libfundts.cc: Likewise. + * testsuite/libstdc++-prettyprinters/simple.cc: Likewise. + * testsuite/libstdc++-prettyprinters/simple11.cc: Likewise. + * testsuite/libstdc++-prettyprinters/whatis.cc: Likewise. + * testsuite/libstdc++-prettyprinters/whatis2.cc: Likewise. + Remove array_allocator extension, deprecated since 4.9.0 * doc/xml/manual/allocator.xml: Remove documentation for array_allocator. diff --git a/libstdc++-v3/doc/Makefile.am b/libstdc++-v3/doc/Makefile.am index eb8251d10e3..b9aca381b74 100644 --- a/libstdc++-v3/doc/Makefile.am +++ b/libstdc++-v3/doc/Makefile.am @@ -336,7 +336,6 @@ xml_sources_manual = \ ${xml_dir}/manual/policy_data_structures.xml \ ${xml_dir}/manual/policy_data_structures_biblio.xml \ ${xml_dir}/manual/prerequisites.xml \ - ${xml_dir}/manual/profile_mode.xml \ ${xml_dir}/manual/shared_ptr.xml \ ${xml_dir}/manual/spine.xml \ ${xml_dir}/manual/status_cxx1998.xml \ diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in index 12be1f7e254..5fee1b2d310 100644 --- a/libstdc++-v3/doc/Makefile.in +++ b/libstdc++-v3/doc/Makefile.in @@ -477,7 +477,6 @@ xml_sources_manual = \ ${xml_dir}/manual/policy_data_structures.xml \ ${xml_dir}/manual/policy_data_structures_biblio.xml \ ${xml_dir}/manual/prerequisites.xml \ - ${xml_dir}/manual/profile_mode.xml \ ${xml_dir}/manual/shared_ptr.xml \ ${xml_dir}/manual/spine.xml \ ${xml_dir}/manual/status_cxx1998.xml \ diff --git a/libstdc++-v3/doc/html/index.html b/libstdc++-v3/doc/html/index.html index 25447dbcefe..2b7f36070f8 100644 --- a/libstdc++-v3/doc/html/index.html +++ b/libstdc++-v3/doc/html/index.html @@ -23,7 +23,7 @@ </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I. Introduction -</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2014">C++ 2014</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2020">C++ 202a</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2020.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/std_contents.html">II. +</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2014">C++ 2014</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2020">C++ 202a</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2020.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/std_contents.html">II. Standard Contents </a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/support.html">4. Support @@ -65,7 +65,7 @@ Extensions </a></span></dt><dd><dl><dt><span class="preface"><a href="manual/ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="manual/ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="manual/debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="manual/debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="manual/debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="manual/debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and - debug-mode components</a></span></dt><dt><span class="section"><a href="manual/debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="manual/parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="manual/parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="manual/parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="manual/profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="manual/profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="manual/profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="manual/profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="manual/profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="manual/profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="manual/profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="manual/profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="manual/profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="manual/profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="manual/profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="manual/profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="manual/profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="manual/profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="manual/profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="manual/profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="manual/profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="manual/profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="manual/profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="manual/mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="manual/mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="manual/mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="manual/mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="manual/mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.configuring"> + debug-mode components</a></span></dt><dt><span class="section"><a href="manual/debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="manual/parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="manual/parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="manual/parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="manual/parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/mt_allocator.html">19. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="manual/mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="manual/mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="manual/mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="manual/mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="manual/mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="manual/mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/bitmap_allocator.html">20. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="manual/bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/policy_data_structures.html">21. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.configuring"> Configuring via Template Parameters </a></span></dt><dt><span class="section"><a href="manual/policy_data_structures_using.html#pbds.using.tutorial.traits"> Querying Container Attributes @@ -127,7 +127,7 @@ Text <code class="function">modify</code> Up </a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#performance.priority_queue.text_modify_down"> Text <code class="function">modify</code> Down - </a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="manual/policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="manual/ext_sgi.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="manual/ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="manual/ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="manual/ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="manual/ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="manual/ext_concurrency.html">30. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Built-in Atomic Functions</a></span></dt><dt><span class="section"><a href="manual/ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="manual/ext_concurrency_use.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/appendix.html">IV. + </a></span></dt></dl></dd><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="manual/policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="manual/policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_containers.html">22. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="manual/ext_sgi.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_utilities.html">23. Utilities</a></span></dt><dt><span class="chapter"><a href="manual/ext_algorithms.html">24. Algorithms</a></span></dt><dt><span class="chapter"><a href="manual/ext_numerics.html">25. Numerics</a></span></dt><dt><span class="chapter"><a href="manual/ext_iterators.html">26. Iterators</a></span></dt><dt><span class="chapter"><a href="manual/ext_io.html">27. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_demangling.html">28. Demangling</a></span></dt><dt><span class="chapter"><a href="manual/ext_concurrency.html">29. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Built-in Atomic Functions</a></span></dt><dt><span class="section"><a href="manual/ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="manual/ext_concurrency_use.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/appendix.html">IV. Appendices </a></span></dt><dd><dl><dt><span class="appendix"><a href="manual/appendix_contributing.html">A. Contributing @@ -142,7 +142,7 @@ Existing tests </a></span></dt><dt><span class="section"><a href="manual/test.html#test.exception.safety.containers"> C++11 Requirements Test Sequence Descriptions -</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_51"><code class="constant">5</code></a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_53"><code class="constant">5.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html#api.rel_61"><code class="constant">6</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_71"><code class="constant">7</code></a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_72"><code class="constant">7.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_73"><code class="constant">7.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html#api.rel_81"><code class="constant">8</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_91"><code class="constant">9</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename"><cctype></code> is a macro +</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_51"><code class="constant">5</code></a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_53"><code class="constant">5.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html#api.rel_61"><code class="constant">6</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_71"><code class="constant">7</code></a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_72"><code class="constant">7.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_73"><code class="constant">7.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html#api.rel_81"><code class="constant">8</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_91"><code class="constant">9</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_101"><code class="constant">10</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename"><cctype></code> is a macro </a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.eof">No <code class="code">std::char_traits<char>::eof</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.ostreamform_istreamscan"> Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code> extensions diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html index f9cbad526a8..bb131d3010c 100644 --- a/libstdc++-v3/doc/html/manual/api.html +++ b/libstdc++-v3/doc/html/manual/api.html @@ -34,7 +34,7 @@ Removal of <code class="filename"><ext/tree></code>, moved to <code class= GCC 3.4 onwards the default allocator uses <code class="code">new</code> anyway, but for the optional pooling allocators the functionality is enabled by setting <code class="literal">GLIBCXX_FORCE_NEW</code> in the environment, see - <a class="link" href="mt_allocator.html" title="Chapter 20. The mt_allocator">the mt allocator chapter</a> + <a class="link" href="mt_allocator.html" title="Chapter 19. The mt_allocator">the mt allocator chapter</a> for details. </p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"></a><code class="constant">3.3</code></h3></div></div></div><p> </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"></a><code class="constant">3.4</code></h3></div></div></div><p> @@ -391,4 +391,6 @@ now defaults to zero. <code class="filename"><experimental/socket></code>, and <code class="filename"><experimental/timer></code>. +</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_101"></a><code class="constant">10</code></h3></div></div></div><p> Deprecated features removed: +</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> Profile Mode </li><li class="listitem"><code class="classname">__gnu_cxx::array_allocator</code></li></ul></div><p> </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/appendix.html b/libstdc++-v3/doc/html/manual/appendix.html index 2c7889f42b8..4e67b78fedb 100644 --- a/libstdc++-v3/doc/html/manual/appendix.html +++ b/libstdc++-v3/doc/html/manual/appendix.html @@ -16,7 +16,7 @@ Existing tests </a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers"> C++11 Requirements Test Sequence Descriptions -</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_51"><code class="constant">5</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_53"><code class="constant">5.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_61"><code class="constant">6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_71"><code class="constant">7</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_72"><code class="constant">7.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_73"><code class="constant">7.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_81"><code class="constant">8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_91"><code class="constant">9</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename"><cctype></code> is a macro +</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_51"><code class="constant">5</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_53"><code class="constant">5.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_61"><code class="constant">6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_71"><code class="constant">7</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_72"><code class="constant">7.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_73"><code class="constant">7.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_81"><code class="constant">8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_91"><code class="constant">9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_101"><code class="constant">10</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename"><cctype></code> is a macro </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits<char>::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan"> Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code> extensions diff --git a/libstdc++-v3/doc/html/manual/appendix_porting.html b/libstdc++-v3/doc/html/manual/appendix_porting.html index 5fbba90f8ec..129eeff3492 100644 --- a/libstdc++-v3/doc/html/manual/appendix_porting.html +++ b/libstdc++-v3/doc/html/manual/appendix_porting.html @@ -14,7 +14,7 @@ Existing tests </a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers"> C++11 Requirements Test Sequence Descriptions -</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_51"><code class="constant">5</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_53"><code class="constant">5.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_61"><code class="constant">6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_71"><code class="constant">7</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_72"><code class="constant">7.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_73"><code class="constant">7.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_81"><code class="constant">8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_91"><code class="constant">9</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename"><cctype></code> is a macro +</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_51"><code class="constant">5</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_53"><code class="constant">5.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_61"><code class="constant">6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_71"><code class="constant">7</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_72"><code class="constant">7.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_73"><code class="constant">7.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_81"><code class="constant">8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_91"><code class="constant">9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_101"><code class="constant">10</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename"><cctype></code> is a macro </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits<char>::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan"> Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code> extensions diff --git a/libstdc++-v3/doc/html/manual/bitmap_allocator.html b/libstdc++-v3/doc/html/manual/bitmap_allocator.html index 265bba92764..51f52ea9941 100644 --- a/libstdc++-v3/doc/html/manual/bitmap_allocator.html +++ b/libstdc++-v3/doc/html/manual/bitmap_allocator.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. The bitmap_allocator</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The bitmap_allocator</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 21. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 20. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p> </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.design"></a>Design</h2></div></div></div><p> As this name suggests, this allocator uses a bit-map to keep track of the used and unused memory locations for its book-keeping diff --git a/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html b/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html index 44b5728e808..0c68eea720f 100644 --- a/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html +++ b/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 21. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 20. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 20. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 21. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p> The Free List Store (referred to as FLS for the remaining part of this document) is the Global memory pool that is shared by all instances of the bitmapped allocator instantiated for any type. This maintains a @@ -75,7 +75,7 @@ else return false.</p></li></ol></div><p> </p><p> Consider a block of size 64 ints. In memory, it would look like this: (assume a 32-bit system where, size_t is a 32-bit entity). - </p><div class="table"><a id="table.bitmap_alloc"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table class="table" summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -> Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p> + </p><div class="table"><a id="table.bitmap_alloc"></a><p class="title"><strong>Table 20.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table class="table" summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -> Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p> The first Column(268) represents the size of the Block in bytes as seen by the Bitmap Allocator. Internally, a global free list is used to keep track of the free blocks used and given back by the @@ -309,4 +309,4 @@ equivalent.</p></li><li class="listitem"><p>And also this would preserve the cac sizeof(size_t) x 8 which is the number of bits in an integer, which can fit exactly in a CPU register. Hence, the term given is exponential growth of the internal pool. - </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bitmap_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. The bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Policy-Based Data Structures</td></tr></table></div></body></html>
\ No newline at end of file + </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bitmap_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. The bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. Policy-Based Data Structures</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/bugs.html b/libstdc++-v3/doc/html/manual/bugs.html index 208ec296743..f72404baedb 100644 --- a/libstdc++-v3/doc/html/manual/bugs.html +++ b/libstdc++-v3/doc/html/manual/bugs.html @@ -458,6 +458,14 @@ should neither be constrained nor <code class="code">explicit</code> </em></span> </span></dt><dd><p>Remove <code class="code">explicit</code> from the constructor. + </p></dd><dt><a id="manual.bugs.dr2408"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2408" target="_top">2408</a>: + <span class="emphasis"><em>SFINAE-friendly + <code class="code">common_type</code>/<code class="code">iterator_traits</code> + is missing in C++14 + </em></span> + </span></dt><dd><p>Make <code class="code">iterator_traits</code> empty if any of the + types is not present in the iterator. + Make <code class="code">common_type<></code> empty. </p></dd><dt><a id="manual.bugs.dr2415"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2415" target="_top">2415</a>: <span class="emphasis"><em>Inconsistency between <code class="code">unique_ptr</code> and <code class="code">shared_ptr</code></em></span> </span></dt><dd><p>Create empty an <code class="code">shared_ptr</code> from an empty @@ -491,6 +499,12 @@ <span class="emphasis"><em><code class="code">std::polar</code> should require a non-negative rho </em></span> </span></dt><dd><p>Add debug mode assertion. + </p></dd><dt><a id="manual.bugs.dr2465"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2465" target="_top">2465</a>: + <span class="emphasis"><em>SFINAE-friendly <code class="code">common_type</code> is nearly impossible + to specialize correctly and regresses key functionality + </em></span> + </span></dt><dd><p>Detect whether <code class="code">decay_t</code> changes either type + and use the decayed types if so. </p></dd><dt><a id="manual.bugs.dr2466"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2466" target="_top">2466</a>: <span class="emphasis"><em><code class="code">allocator_traits::max_size()</code> default behavior is incorrect </em></span> @@ -501,14 +515,14 @@ </span></dt><dd><p>Avoid using <code class="code">dynamic_cast</code> when it would be ill-formed. </p></dd><dt><a id="manual.bugs.dr2537"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2537" target="_top">2537</a>: - <span class="emphasis"><em>Requirements on the first template parameter of container adaptors - </em></span> - </span></dt><dd><p>Add static assertions to enforce the requirement. - </p></dd><dt><a id="manual.bugs.dr2566"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2566" target="_top">2566</a>: <span class="emphasis"><em>Constructors for <code class="code">priority_queue</code> taking allocators should call <code class="code">make_heap</code> </em></span> </span></dt><dd><p>Call <code class="code">make_heap</code>. + </p></dd><dt><a id="manual.bugs.dr2566"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2566" target="_top">2566</a>: + <span class="emphasis"><em>Requirements on the first template parameter of container adaptors + </em></span> + </span></dt><dd><p>Add static assertions to enforce the requirement. </p></dd><dt><a id="manual.bugs.dr2583"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2583" target="_top">2583</a>: <span class="emphasis"><em>There is no way to supply an allocator for <code class="code">basic_string(str, pos)</code> </em></span> diff --git a/libstdc++-v3/doc/html/manual/debug.html b/libstdc++-v3/doc/html/manual/debug.html index bce4242cdde..cdf01bd1995 100644 --- a/libstdc++-v3/doc/html/manual/debug.html +++ b/libstdc++-v3/doc/html/manual/debug.html @@ -129,7 +129,7 @@ <code class="literal">GLIBCXX_FORCE_NEW</code> to keep extraneous pool allocation noise from cluttering debug information. For more details, see the - <a class="link" href="mt_allocator.html" title="Chapter 20. The mt_allocator">mt allocator</a> + <a class="link" href="mt_allocator.html" title="Chapter 19. The mt_allocator">mt allocator</a> documentation and look specifically for <code class="code">GLIBCXX_FORCE_NEW</code>. </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.races"></a>Data Race Hunting</h3></div></div></div><p> All synchronization primitives used in the library internals need to be @@ -233,9 +233,6 @@ has compile and run-time checks for many containers. </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time Checks</a> extension has compile-time checks for many algorithms. - </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based - Performance Analysis</a> extension has performance checks for many - algorithms. </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="std_contents.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. Standard Contents </td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_algorithms.html b/libstdc++-v3/doc/html/manual/ext_algorithms.html index 805734fefbe..b7511c49848 100644 --- a/libstdc++-v3/doc/html/manual/ext_algorithms.html +++ b/libstdc++-v3/doc/html/manual/ext_algorithms.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Algorithms</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 24. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 26. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Algorithms</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 23. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 25. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 25. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count +</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 24. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count and count_if. The standard versions return their results. The additional signatures return void, but take a final parameter by reference to which they assign their results, e.g., @@ -19,4 +19,4 @@ </p><pre class="programlisting"> lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2)</pre><p>which does... what? -</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Numerics</td></tr></table></div></body></html>
\ No newline at end of file +</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Numerics</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_concurrency.html b/libstdc++-v3/doc/html/manual/ext_concurrency.html index 5d9b33204c2..ed7a3ea9f4d 100644 --- a/libstdc++-v3/doc/html/manual/ext_concurrency.html +++ b/libstdc++-v3/doc/html/manual/ext_concurrency.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Concurrency</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 29. Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Concurrency</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 28. Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 30. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Built-in Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename"><ext/concurrence.h></code> +</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 29. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Built-in Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename"><ext/concurrence.h></code> contains all the higher-level constructs for playing with threads. In contrast to the atomics layer, the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>. @@ -90,4 +90,4 @@ _GLIBCXX_WRITE_MEM_BARRIER </p><p> Which expand to the appropriate write and read barrier required by the host hardware and operating system. -</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 29. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
\ No newline at end of file +</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html b/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html index 509c620087b..23b90f34572 100644 --- a/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html +++ b/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Built-in Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 29. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 29. Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 29. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Built-in Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either implemented via compiler intrinsics (if the underlying host is capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as the compiler builtins for atomics are not universally implemented, @@ -49,4 +49,4 @@ use this layer. More detail as to the specific interface can be found in the sou functions, and usage found in the usual <pthread.h> file, including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>, etc. -</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
\ No newline at end of file +</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 29. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_concurrency_use.html b/libstdc++-v3/doc/html/manual/ext_concurrency_use.html index 85c85b4a7b2..6a0d345a910 100644 --- a/libstdc++-v3/doc/html/manual/ext_concurrency_use.html +++ b/libstdc++-v3/doc/html/manual/ext_concurrency_use.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="Part IV. Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows: +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 29. Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="Part IV. Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 29. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows: </p><pre class="programlisting"> #include <ext/concurrence.h> diff --git a/libstdc++-v3/doc/html/manual/ext_containers.html b/libstdc++-v3/doc/html/manual/ext_containers.html index a75b7939116..cba81484f5b 100644 --- a/libstdc++-v3/doc/html/manual/ext_containers.html +++ b/libstdc++-v3/doc/html/manual/ext_containers.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 23. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have +</th><td width="20%" align="right"> <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 22. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have been made with containers. Those dealing with older SGI-style allocators are dealt with elsewhere. The remaining ones all deal with bits: diff --git a/libstdc++-v3/doc/html/manual/ext_demangling.html b/libstdc++-v3/doc/html/manual/ext_demangling.html index cbca6c0ee64..879497f7d08 100644 --- a/libstdc++-v3/doc/html/manual/ext_demangling.html +++ b/libstdc++-v3/doc/html/manual/ext_demangling.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Demangling</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 28. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 30. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Demangling</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 27. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 29. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 29. Demangling</h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 28. Demangling</h2></div></div></div><p> Transforming C++ ABI identifiers (like RTTI symbols) into the original C++ source identifiers is called <span class="quote">“<span class="quote">demangling.</span>”</span> @@ -70,4 +70,4 @@ int main() be writing C++ in order to demangle C++. (That also means we have to use crummy memory management facilities, so don't forget to free() the returned char array.) - </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 30. Concurrency</td></tr></table></div></body></html>
\ No newline at end of file + </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 29. Concurrency</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_io.html b/libstdc++-v3/doc/html/manual/ext_io.html index 2959d5d554f..7bf81dfa860 100644 --- a/libstdc++-v3/doc/html/manual/ext_io.html +++ b/libstdc++-v3/doc/html/manual/ext_io.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 27. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 29. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 26. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 28. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 28. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 27. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p> Extensions allowing <code class="code">filebuf</code>s to be constructed from "C" types like FILE*s and file descriptors. </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.io.filebuf_derived"></a>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct @@ -43,4 +43,4 @@ <code class="classname">__gnu_cxx::stdio_filebuf</code>. This class can be constructed from a C <code class="code">FILE*</code> or a file descriptor, and provides the <code class="code">fd()</code> function. - </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 29. Demangling</td></tr></table></div></body></html>
\ No newline at end of file + </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Demangling</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_iterators.html b/libstdc++-v3/doc/html/manual/ext_iterators.html index b349aab81ad..952f1b5bb62 100644 --- a/libstdc++-v3/doc/html/manual/ext_iterators.html +++ b/libstdc++-v3/doc/html/manual/ext_iterators.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Iterators</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 26. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 28. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Iterators</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 25. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 27. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 27. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the +</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 26. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the original HP STL implementation (the language wasn't rich enough at the time). For backwards compatibility, base classes are provided which declare the same nested typedefs: @@ -10,4 +10,4 @@ two iterators and returns a result. It is extended by another signature which takes two iterators and a reference to a result. The result is modified, and the function returns nothing. -</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Input and Output</td></tr></table></div></body></html>
\ No newline at end of file +</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Input and Output</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_numerics.html b/libstdc++-v3/doc/html/manual/ext_numerics.html index 57b14ee56eb..9b864e1dcf4 100644 --- a/libstdc++-v3/doc/html/manual/ext_numerics.html +++ b/libstdc++-v3/doc/html/manual/ext_numerics.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Numerics</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 25. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 27. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Numerics</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 24. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 26. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 26. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as <code class="code">accumulate</code>, +</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 25. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as <code class="code">accumulate</code>, are extended with the following functions: </p><pre class="programlisting"> power (x, n); @@ -20,4 +20,4 @@ <code class="code">value + 1</code> to<code class="code"> *(first + 1)</code> and so on." </p><pre class="programlisting"> void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre><p>The <code class="code">iota</code> function is included in the ISO C++ 2011 standard. -</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Iterators</td></tr></table></div></body></html>
\ No newline at end of file +</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Iterators</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_sgi.html b/libstdc++-v3/doc/html/manual/ext_sgi.html index da0f85f8d81..ae2062954f4 100644 --- a/libstdc++-v3/doc/html/manual/ext_sgi.html +++ b/libstdc++-v3/doc/html/manual/ext_sgi.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 24. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 23. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 22. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 22. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 23. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 22. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p> The SGI hashing classes <code class="classname">hash_set</code> and <code class="classname">hash_set</code> have been deprecated by the unordered_set, unordered_multiset, unordered_map, @@ -55,4 +55,4 @@ associative containers defined in the ISO C++ 2011 standard in the headers <code class="filename"><unordered_map></code> and <code class="filename"><unordered_set></code>. - </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. HP/SGI Extensions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Utilities</td></tr></table></div></body></html>
\ No newline at end of file + </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. HP/SGI Extensions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. Utilities</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_utilities.html b/libstdc++-v3/doc/html/manual/ext_utilities.html index 6200b01e30c..9caf65f89eb 100644 --- a/libstdc++-v3/doc/html/manual/ext_utilities.html +++ b/libstdc++-v3/doc/html/manual/ext_utilities.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Utilities</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 25. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. Utilities</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 24. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 24. Utilities</h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 23. Utilities</h2></div></div></div><p> The <code class="filename"><functional></code> header contains many additional functors and helper functions, extending section 20.3. They are @@ -38,4 +38,4 @@ get_temporary_buffer(5, (int*)0); </p><p> The specialized algorithms of section 20.4.4 are extended with <code class="code">uninitialized_copy_n</code>. -</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Algorithms</td></tr></table></div></body></html>
\ No newline at end of file +</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Algorithms</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/extensions.html b/libstdc++-v3/doc/html/manual/extensions.html index 57dd1132c1d..e5836efa85d 100644 --- a/libstdc++-v3/doc/html/manual/extensions.html +++ b/libstdc++-v3/doc/html/manual/extensions.html @@ -6,7 +6,7 @@ Extensions <a id="id-1.3.5.1.1.1" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and - debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring"> + debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">19. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">20. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">21. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring"> Configuring via Template Parameters </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits"> Querying Container Attributes @@ -68,4 +68,4 @@ Text <code class="function">modify</code> Up </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down"> Text <code class="function">modify</code> Down - </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">30. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Built-in Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_preface.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
\ No newline at end of file + </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">22. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">23. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">24. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">25. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">26. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">27. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">28. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">29. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Built-in Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_preface.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/index.html b/libstdc++-v3/doc/html/manual/index.html index f493b275632..69b56420978 100644 --- a/libstdc++-v3/doc/html/manual/index.html +++ b/libstdc++-v3/doc/html/manual/index.html @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 <a class="link" href="https://www.fsf.org" target="_top">FSF</a> </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="part"><a href="intro.html">I. Introduction -</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dt><span class="section"><a href="status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2020">C++ 202a</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2020.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="std_contents.html">II. +</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dt><span class="section"><a href="status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2020">C++ 202a</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2020.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="std_contents.html">II. Standard Contents </a></span></dt><dd><dl><dt><span class="chapter"><a href="support.html">4. Support @@ -46,7 +46,7 @@ Extensions </a></span></dt><dd><dl><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and - debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring"> + debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">19. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">20. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">21. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring"> Configuring via Template Parameters </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits"> Querying Container Attributes @@ -108,7 +108,7 @@ Text <code class="function">modify</code> Up </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down"> Text <code class="function">modify</code> Down - </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">30. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Built-in Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="appendix.html">IV. + </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">22. HP/SGI Extensions</a></span></dt><dd><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">23. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">24. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">25. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">26. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">27. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">28. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">29. Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Built-in Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="appendix.html">IV. Appendices </a></span></dt><dd><dl><dt><span class="appendix"><a href="appendix_contributing.html">A. Contributing @@ -123,7 +123,7 @@ Existing tests </a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers"> C++11 Requirements Test Sequence Descriptions -</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_51"><code class="constant">5</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_53"><code class="constant">5.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_61"><code class="constant">6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_71"><code class="constant">7</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_72"><code class="constant">7.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_73"><code class="constant">7.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_81"><code class="constant">8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_91"><code class="constant">9</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename"><cctype></code> is a macro +</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_51"><code class="constant">5</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_53"><code class="constant">5.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_61"><code class="constant">6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_71"><code class="constant">7</code></a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_72"><code class="constant">7.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_73"><code class="constant">7.3</code></a></span></dt></dl></dd><dt><span class="section"><a href="api.html#api.rel_81"><code class="constant">8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_91"><code class="constant">9</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_101"><code class="constant">10</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename"><cctype></code> is a macro </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits<char>::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan"> Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code> extensions @@ -143,19 +143,19 @@ Support for C++11 dialect. </a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D. <acronym class="acronym">GNU</acronym> General Public License version 3 - </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#id-1.3.5.9.2.5.3.3.4">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#id-1.3.5.9.2.5.3.4.4">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#id-1.3.5.9.2.5.3.5.4.5">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#id-1.3.5.9.2.5.3.5.5.7">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#id-1.3.5.9.2.5.3.5.6.6">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#id-1.3.5.9.2.5.4.3.3">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#id-1.3.5.9.3.3.6">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#id-1.3.5.9.4.3.3.3.14">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2"> + </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>21.1. <a href="policy_data_structures.html#id-1.3.5.8.2.5.3.3.4">Node Invariants</a></dt><dt>21.2. <a href="policy_data_structures.html#id-1.3.5.8.2.5.3.4.4">Underlying Associative Data Structures</a></dt><dt>21.3. <a href="policy_data_structures.html#id-1.3.5.8.2.5.3.5.4.5">Range Iteration in Different Data Structures</a></dt><dt>21.4. <a href="policy_data_structures.html#id-1.3.5.8.2.5.3.5.5.7">Point Iteration in Hash Data Structures</a></dt><dt>21.5. <a href="policy_data_structures.html#id-1.3.5.8.2.5.3.5.6.6">Effect of erase in different underlying data structures</a></dt><dt>21.6. <a href="policy_data_structures.html#id-1.3.5.8.2.5.4.3.3">Underlying Priority Queue Data Structures</a></dt><dt>21.7. <a href="policy_data_structures_using.html#id-1.3.5.8.3.3.6">Exception Hierarchy</a></dt><dt>21.8. <a href="policy_data_structures_design.html#id-1.3.5.8.4.3.3.3.14">Non-unique Mapping Standard Containers</a></dt><dt>21.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2"> Effect of embedded lists in <code class="classname">std::multimap</code> - </a></dt><dt>22.10. <a href="policy_data_structures_design.html#id-1.3.5.9.4.3.3.3.23">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#id-1.3.5.9.4.3.4.3.5">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#id-1.3.5.9.4.3.4.4.5">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#id-1.3.5.9.4.3.5.7.4">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.2.3">Hash functions, ranged-hash functions, and - range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.5.3.4">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.5.3.6">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.5.5.5">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.3.4.7">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.3.5.3.6">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.3.5.3.9">Standard resize policy trigger sequence - diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.3.5.3.10">Standard resize policy size sequence - diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.3.3.2.5">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.3.3.2.8">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.3.3.2.11.3">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.3.3.2.11.8">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.3.3.2.11.10">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.3.3.2.11.20">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.4.3.2.10">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.4.3.3.5">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.5.3.3.3">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.5.3.3.6">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.6.3.3.3">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.6.3.4.4">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#fig.build_hacking.deps">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#table.cxx98_status">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#table.cxx11_status">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#table.cxx14_status">C++ 2014 Implementation Status</a></dt><dt>1.4. <a href="status.html#table.ts_status">C++ Technical Specifications Implementation Status</a></dt><dt>1.5. <a href="status.html#table.cxx17_status">C++ 2017 Implementation Status</a></dt><dt>1.6. <a href="status.html#table.cxx17_ts_status">C++ Technical Specifications Implementation Status</a></dt><dt>1.7. <a href="status.html#table.cxx20_status">C++ 2020 Implementation Status</a></dt><dt>1.8. <a href="status.html#table.tr1_status">C++ TR1 Implementation Status</a></dt><dt>1.9. <a href="status.html#table.decfp_status">C++ TR 24733 Implementation Status</a></dt><dt>1.10. <a href="status.html#table.specfun_status">C++ Special Functions Implementation Status</a></dt><dt>3.1. <a href="using.html#table.cmd_options">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#table.cxx98_headers">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#table.cxx98_cheaders">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#table.cxx98_deprheaders">C++ 1998 Deprecated Library Header</a></dt><dt>3.5. <a href="using_headers.html#table.cxx11_headers">C++ 2011 Library Headers</a></dt><dt>3.6. <a href="using_headers.html#table.cxx11_cheaders">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.7. <a href="using_headers.html#table.cxx14_headers">C++ 2014 Library Header</a></dt><dt>3.8. <a href="using_headers.html#table.cxx17_headers">C++ 2017 Library Headers</a></dt><dt>3.9. <a href="using_headers.html#table.cxx20_headers">C++ 2020 Library Headers</a></dt><dt>3.10. <a href="using_headers.html#table.cxx20_deprheaders">C++ 2020 Obsolete Headers</a></dt><dt>3.11. <a href="using_headers.html#table.filesystemts_headers">File System TS Header</a></dt><dt>3.12. <a href="using_headers.html#table.libfundts_headers">Library Fundamentals TS Headers</a></dt><dt>3.13. <a href="using_headers.html#table.tr1_headers">C++ TR 1 Library Headers</a></dt><dt>3.14. <a href="using_headers.html#table.tr1_cheaders">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.15. <a href="using_headers.html#table.decfp_headers">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.16. <a href="using_headers.html#table.abi_headers">C++ ABI Headers</a></dt><dt>3.17. <a href="using_headers.html#table.ext_headers">Extension Headers</a></dt><dt>3.18. <a href="using_headers.html#table.debug_headers">Extension Debug Headers</a></dt><dt>3.19. <a href="using_headers.html#table.profile_headers">Extension Profile Headers</a></dt><dt>3.20. <a href="using_headers.html#table.parallel_headers">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#table.debug_mode_containers">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#table.debug_mode_containers_cxx11">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#table.parallel_algos">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#table.profile_code_loc">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#table.profile_diagnostics">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#table.bitmap_alloc">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#table.doxygen_prereq">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#table.doxygen_cmp">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#table.docbook_prereq">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#table.docbook_cmp">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#table.docbook_elem">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#table.extension_allocators">Extension Allocators</a></dt><dt>B.7. <a href="api.html#table.extension_allocators2">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.2.15">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.3.3">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.3.9">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.3.11">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.4.7"> + </a></dt><dt>21.10. <a href="policy_data_structures_design.html#id-1.3.5.8.4.3.3.3.23">Non-unique Mapping Containers</a></dt><dt>21.11. <a href="policy_data_structures_design.html#id-1.3.5.8.4.3.4.3.5">Point Iterator Hierarchy</a></dt><dt>21.12. <a href="policy_data_structures_design.html#id-1.3.5.8.4.3.4.4.5">Invalidation Guarantee Tags Hierarchy</a></dt><dt>21.13. <a href="policy_data_structures_design.html#id-1.3.5.8.4.3.5.7.4">Container Tag Hierarchy</a></dt><dt>21.14. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.2.3">Hash functions, ranged-hash functions, and + range-hashing functions</a></dt><dt>21.15. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.5.3.4">Insert hash sequence diagram</a></dt><dt>21.16. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.5.3.6">Insert hash sequence diagram with a null policy</a></dt><dt>21.17. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.5.5.5">Hash policy class diagram</a></dt><dt>21.18. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.3.4.7">Balls and bins</a></dt><dt>21.19. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.3.5.3.6">Insert resize sequence diagram</a></dt><dt>21.20. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.3.5.3.9">Standard resize policy trigger sequence + diagram</a></dt><dt>21.21. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.3.5.3.10">Standard resize policy size sequence + diagram</a></dt><dt>21.22. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.3.3.2.5">Tree node invariants</a></dt><dt>21.23. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.3.3.2.8">Tree node invalidation</a></dt><dt>21.24. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.3.3.2.11.3">A tree and its update policy</a></dt><dt>21.25. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.3.3.2.11.8">Restoring node invariants</a></dt><dt>21.26. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.3.3.2.11.10">Insert update sequence</a></dt><dt>21.27. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.3.3.2.11.20">Useless update path</a></dt><dt>21.28. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.4.3.2.10">A PATRICIA trie</a></dt><dt>21.29. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.4.3.3.5">A trie and its update policy</a></dt><dt>21.30. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.5.3.3.3">A simple list</a></dt><dt>21.31. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.5.3.3.6">The counter algorithm</a></dt><dt>21.32. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.6.3.3.3">Underlying Priority-Queue Data-Structures.</a></dt><dt>21.33. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.6.3.4.4">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#fig.build_hacking.deps">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#table.cxx98_status">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#table.cxx11_status">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#table.cxx14_status">C++ 2014 Implementation Status</a></dt><dt>1.4. <a href="status.html#table.ts_status">C++ Technical Specifications Implementation Status</a></dt><dt>1.5. <a href="status.html#table.cxx17_status">C++ 2017 Implementation Status</a></dt><dt>1.6. <a href="status.html#table.cxx17_ts_status">C++ Technical Specifications Implementation Status</a></dt><dt>1.7. <a href="status.html#table.cxx20_status">C++ 2020 Implementation Status</a></dt><dt>1.8. <a href="status.html#table.tr1_status">C++ TR1 Implementation Status</a></dt><dt>1.9. <a href="status.html#table.decfp_status">C++ TR 24733 Implementation Status</a></dt><dt>1.10. <a href="status.html#table.specfun_status">C++ Special Functions Implementation Status</a></dt><dt>3.1. <a href="using.html#table.cmd_options">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#table.cxx98_headers">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#table.cxx98_cheaders">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#table.cxx98_deprheaders">C++ 1998 Deprecated Library Header</a></dt><dt>3.5. <a href="using_headers.html#table.cxx11_headers">C++ 2011 Library Headers</a></dt><dt>3.6. <a href="using_headers.html#table.cxx11_cheaders">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.7. <a href="using_headers.html#table.cxx14_headers">C++ 2014 Library Header</a></dt><dt>3.8. <a href="using_headers.html#table.cxx17_headers">C++ 2017 Library Headers</a></dt><dt>3.9. <a href="using_headers.html#table.cxx20_headers">C++ 2020 Library Headers</a></dt><dt>3.10. <a href="using_headers.html#table.cxx20_deprheaders">C++ 2020 Obsolete Headers</a></dt><dt>3.11. <a href="using_headers.html#table.filesystemts_headers">File System TS Header</a></dt><dt>3.12. <a href="using_headers.html#table.libfundts_headers">Library Fundamentals TS Headers</a></dt><dt>3.13. <a href="using_headers.html#table.tr1_headers">C++ TR 1 Library Headers</a></dt><dt>3.14. <a href="using_headers.html#table.tr1_cheaders">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.15. <a href="using_headers.html#table.decfp_headers">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.16. <a href="using_headers.html#table.abi_headers">C++ ABI Headers</a></dt><dt>3.17. <a href="using_headers.html#table.ext_headers">Extension Headers</a></dt><dt>3.18. <a href="using_headers.html#table.debug_headers">Extension Debug Headers</a></dt><dt>3.19. <a href="using_headers.html#table.parallel_headers">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#table.debug_mode_containers">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#table.debug_mode_containers_cxx11">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#table.parallel_algos">Parallel Algorithms</a></dt><dt>20.1. <a href="bitmap_allocator_impl.html#table.bitmap_alloc">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#table.doxygen_prereq">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#table.doxygen_cmp">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#table.docbook_prereq">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#table.docbook_cmp">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#table.docbook_elem">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#table.extension_allocators">Extension Allocators</a></dt><dt>B.7. <a href="api.html#table.extension_allocators2">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>21.1. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.2.15">Ranged Hash Function</a></dt><dt>21.2. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.3.3">Range-Hashing, Division Method</a></dt><dt>21.3. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.3.9">Division via Prime Modulo</a></dt><dt>21.4. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.3.11">Division via Bit Mask</a></dt><dt>21.5. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.4.7"> A Standard String Hash Function - </a></dt><dt>22.6. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.2.4.12"> + </a></dt><dt>21.6. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.2.4.12"> Only k String DNA Hash - </a></dt><dt>22.7. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.3.4.9"> + </a></dt><dt>21.7. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.3.4.9"> Probability of Probe Sequence of Length k - </a></dt><dt>22.8. <a href="policy_data_structures_design.html#id-1.3.5.9.4.4.2.3.3.4.14"> + </a></dt><dt>21.8. <a href="policy_data_structures_design.html#id-1.3.5.8.4.4.2.3.3.4.14"> Probability Probe Sequence in Some Bin </a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. Introduction diff --git a/libstdc++-v3/doc/html/manual/intro.html b/libstdc++-v3/doc/html/manual/intro.html index 63fc80cefd7..f59b8117fd0 100644 --- a/libstdc++-v3/doc/html/manual/intro.html +++ b/libstdc++-v3/doc/html/manual/intro.html @@ -5,4 +5,4 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. Introduction <a id="id-1.3.3.1.1.1" class="indexterm"></a> -</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dt><span class="section"><a href="status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2020">C++ 202a</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2020.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
\ No newline at end of file +</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dt><span class="section"><a href="status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2020">C++ 202a</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2020.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/io_and_c.html b/libstdc++-v3/doc/html/manual/io_and_c.html index 71aafa2f71e..dae1b739e56 100644 --- a/libstdc++-v3/doc/html/manual/io_and_c.html +++ b/libstdc++-v3/doc/html/manual/io_and_c.html @@ -3,7 +3,7 @@ Input and Output </th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"></a>Using FILE* and file descriptors</h3></div></div></div><p> - See the <a class="link" href="ext_io.html" title="Chapter 28. Input and Output">extensions</a> for using + See the <a class="link" href="ext_io.html" title="Chapter 27. Input and Output">extensions</a> for using <span class="type">FILE</span> and <span class="type">file descriptors</span> with <code class="classname">ofstream</code> and <code class="classname">ifstream</code>. diff --git a/libstdc++-v3/doc/html/manual/memory.html b/libstdc++-v3/doc/html/manual/memory.html index 11d13a9dd91..b373c31c84c 100644 --- a/libstdc++-v3/doc/html/manual/memory.html +++ b/libstdc++-v3/doc/html/manual/memory.html @@ -222,19 +222,6 @@ <code class="function">new</code>/<code class="function">delete</code> this is taken care of elsewhere). </p></li><li class="listitem"><p> - <code class="classname">array_allocator</code> - </p><p> - Allows allocations of known and fixed sizes using existing - global or external storage allocated via construction of - <code class="classname">std::tr1::array</code> objects. By using this - allocator, fixed size containers (including - <code class="classname">std::string</code>) can be used without - instances calling <code class="function">::operator new</code> and - <code class="function">::operator delete</code>. 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. - </p></li><li class="listitem"><p> <code class="classname">debug_allocator</code> </p><p> A wrapper around an arbitrary allocator A. It passes on @@ -300,14 +287,14 @@ </p><p> A high-performance fixed-size allocator with exponentially-increasing allocations. It has its own - <a class="link" href="mt_allocator.html" title="Chapter 20. The mt_allocator">chapter</a> + <a class="link" href="mt_allocator.html" title="Chapter 19. The mt_allocator">chapter</a> in the documentation. </p></li><li class="listitem"><p> <code class="classname">bitmap_allocator</code> </p><p> A high-performance allocator that uses a bit-map to keep track of the used and unused memory locations. It has its own - <a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">chapter</a> + <a class="link" href="bitmap_allocator.html" title="Chapter 20. The bitmap_allocator">chapter</a> in the documentation. </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id-1.3.4.4.4.3.9.2"></a><p><span class="citetitle"><em class="citetitle"> ISO/IEC 14882:1998 Programming languages - C++ diff --git a/libstdc++-v3/doc/html/manual/mt_allocator.html b/libstdc++-v3/doc/html/manual/mt_allocator.html index 42a0125692e..c7786f02844 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The mt_allocator</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. The mt_allocator</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 20. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 19. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p> </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p> The mt allocator [hereinafter referred to simply as "the allocator"] is a fixed size (power of two) allocator that was initially @@ -19,4 +19,4 @@ </p><p> The aim of this document is to describe - from an application point of view - the "inner workings" of the allocator. -</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Issues</td></tr></table></div></body></html>
\ No newline at end of file +</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Issues</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/mt_allocator_design.html b/libstdc++-v3/doc/html/manual/mt_allocator_design.html index b08c0b7641a..7541c3a8f4b 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator_design.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator_design.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 19. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 19. The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 19. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum describing the characteristics of the memory pool, a policy class containing this pool that links instantiation types to common or individual pools, and a class inheriting from the policy class that is @@ -35,4 +35,4 @@ tuning, for instance. </pre><p> This class has the interface required for standard library allocator classes, namely member functions <code class="code">allocate</code> and <code class="code">deallocate</code>, plus others. -</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. The mt_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
\ No newline at end of file +</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. The mt_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html b/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html index 1cd1749d911..67a1154164b 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 19. The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 20. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><th width="60%" align="center">Chapter 19. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p> In the ST example we never used the thread_id variable present in each block. Let's start by explaining the purpose of this in a MT application. </p><p> @@ -103,4 +103,4 @@ mutex to be locked) this operation is also made in chunks of blocks a threads freelist mentioned above). The "formula" used can probably be improved to further reduce the risk of blocks being "bounced back and forth" between freelists. -</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Single Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. The bitmap_allocator</td></tr></table></div></body></html>
\ No newline at end of file +</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Single Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. The bitmap_allocator</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html b/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html index 7e30f72b953..6934ec3aca9 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 19. The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 19. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p> Let's start by describing how the data on a freelist is laid out in memory. This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes): </p><pre class="programlisting"> diff --git a/libstdc++-v3/doc/html/manual/mt_allocator_impl.html b/libstdc++-v3/doc/html/manual/mt_allocator_impl.html index b5539e2da9b..2e5926add00 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator_impl.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator_impl.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 19. The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><th width="60%" align="center">Chapter 19. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all these parameters, which include settings for </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only diff --git a/libstdc++-v3/doc/html/manual/parallel_mode_test.html b/libstdc++-v3/doc/html/manual/parallel_mode_test.html index a542c196554..912c6ef2e81 100644 --- a/libstdc++-v3/doc/html/manual/parallel_mode_test.html +++ b/libstdc++-v3/doc/html/manual/parallel_mode_test.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="mt_allocator.html" title="Chapter 19. The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p> Both the normal conformance and regression tests and the supplemental performance tests work. </p><p> @@ -22,4 +22,4 @@ additional software dependencies than the usual bare-boned text file, and can be generated by using the <code class="code">make doc-performance</code> rule in the testsuite's Makefile. -</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
\ No newline at end of file +</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. The mt_allocator</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html b/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html index 1be7c2056a2..6e454bd7f52 100644 --- a/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html +++ b/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 21. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test. For a given container type in this library, the test creates an object of the container type and an object of the corresponding standard type (e.g., <code class="classname">std::set</code>). It diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures.html b/libstdc++-v3/doc/html/manual/policy_data_structures.html index 6104eff9fd7..5744ffee37a 100644 --- a/libstdc++-v3/doc/html/manual/policy_data_structures.html +++ b/libstdc++-v3/doc/html/manual/policy_data_structures.html @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Part III. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Part III. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 22. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring"> +</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 21. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring"> Configuring via Template Parameters </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits"> Querying Container Attributes @@ -248,7 +248,7 @@ these invariants, one must supply some policy that is aware of these changes. Without this, it would be better to use a linked list (in itself very efficient for these purposes). - </p></li></ol></div><div class="figure"><a id="id-1.3.5.9.2.5.3.3.4"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p> + </p></li></ol></div><div class="figure"><a id="id-1.3.5.8.2.5.3.3.4"></a><p class="title"><strong>Figure 21.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p> The standard C++ library contains associative containers based on red-black trees and collision-chaining hash tables. These are very useful, but they are not ideal for all types of @@ -256,7 +256,7 @@ </p><p> The figure below shows the different underlying data structures currently supported in this library. - </p><div class="figure"><a id="id-1.3.5.9.2.5.3.4.4"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p> + </p><div class="figure"><a id="id-1.3.5.8.2.5.3.4.4"></a><p class="title"><strong>Figure 21.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p> A shows a collision-chaining hash-table, B shows a probing hash-table, C shows a red-black tree, D shows a splay tree, E shows a tree based on an ordered vector(implicit in the order of the @@ -375,7 +375,7 @@ no guarantee that the elements traversed will coincide with the <span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in label B. - </p><div class="figure"><a id="id-1.3.5.9.2.5.3.5.4.5"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p> + </p><div class="figure"><a id="id-1.3.5.8.2.5.3.5.4.5"></a><p class="title"><strong>Figure 21.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p> In our opinion, this problem is not caused just because red-black trees are order preserving while collision-chaining hash tables are (generally) not - it @@ -426,7 +426,7 @@ list, as in the graphic below, label B. Here the iterators are as light as can be, but the hash-table's operations are more complicated. - </p><div class="figure"><a id="id-1.3.5.9.2.5.3.5.5.7"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p> + </p><div class="figure"><a id="id-1.3.5.8.2.5.3.5.5.7"></a><p class="title"><strong>Figure 21.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p> It should be noted that containers based on collision-chaining hash-tables are not the only ones with this type of behavior; many other self-organizing data structures display it as well. @@ -442,7 +442,7 @@ container. The graphic below shows three cases: A1 and A2 show a red-black tree; B1 and B2 show a probing hash-table; C1 and C2 show a collision-chaining hash table. - </p><div class="figure"><a id="id-1.3.5.9.2.5.3.5.6.6"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p> + </p><div class="figure"><a id="id-1.3.5.8.2.5.3.5.6.6"></a><p class="title"><strong>Figure 21.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p> Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can be de-referenced and incremented. The sequence of iterators changed, but in a way that is well-defined by the interface. @@ -678,7 +678,7 @@ typically less structured than an associative container's tree; the third simply uses an associative container. These are shown in the figure below with labels A1 and A2, B, and C. - </p><div class="figure"><a id="id-1.3.5.9.2.5.4.3.3"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p> + </p><div class="figure"><a id="id-1.3.5.8.2.5.4.3.3"></a><p class="title"><strong>Figure 21.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p> No single implementation can completely replace any of the others. Some have better <code class="function">push</code> and <code class="function">pop</code> amortized performance, some have diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html b/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html index 55fbb4d2c92..e8a8dceaa7a 100644 --- a/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html +++ b/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 21. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 22. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p> Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research Laboratories), and Benjamin Kosnik (Red Hat). </p><p> @@ -24,4 +24,4 @@ attributing to him any flaws in the design or implementation of the library). </p><p>We would like to thank Matt Austern for the suggestion to - include tries.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. HP/SGI Extensions</td></tr></table></div></body></html>
\ No newline at end of file + include tries.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. HP/SGI Extensions</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures_design.html b/libstdc++-v3/doc/html/manual/policy_data_structures_design.html index c6d6a3a4dfc..611b2e76ee9 100644 --- a/libstdc++-v3/doc/html/manual/policy_data_structures_design.html +++ b/libstdc++-v3/doc/html/manual/policy_data_structures_design.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 21. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p> Associative containers are typically parametrized by various policies. For example, a hash-based associative container is parametrized by a hash-functor, transforming each key into an @@ -170,7 +170,7 @@ naturally; collision-chaining hash tables (label B) store equivalent-key values in the same bucket, the bucket can be arranged so that equivalent-key values are consecutive. - </p><div class="figure"><a id="id-1.3.5.9.4.3.3.3.14"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p> + </p><div class="figure"><a id="id-1.3.5.8.4.3.3.3.14"></a><p class="title"><strong>Figure 21.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p> Put differently, the standards' non-unique mapping associative-containers are associative containers that map primary keys to linked lists that are embedded into the @@ -178,7 +178,7 @@ containers from the first graphic above, this time with the embedded linked lists of the grayed nodes marked explicitly. - </p><div class="figure"><a id="fig.pbds_embedded_lists_2"></a><p class="title"><strong>Figure 22.9. + </p><div class="figure"><a id="fig.pbds_embedded_lists_2"></a><p class="title"><strong>Figure 21.9. Effect of embedded lists in <code class="classname">std::multimap</code> </strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_2.png" align="middle" alt="Effect of embedded lists in std::multimap" /></div></div></div><br class="figure-break" /><p> @@ -252,7 +252,7 @@ first graphic above. Labels A and B, respectively. Each shaded box represents some size-type or secondary associative-container. - </p><div class="figure"><a id="id-1.3.5.9.4.3.3.3.23"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p> + </p><div class="figure"><a id="id-1.3.5.8.4.3.3.3.23"></a><p class="title"><strong>Figure 21.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p> In the first example above, then, one would use an associative container mapping each user to an associative container which maps each application id to a start time (see @@ -305,7 +305,7 @@ shows invariants for order-preserving containers: point-type iterators are synonymous with range-type iterators. Orthogonally, <span class="emphasis"><em>C</em></span>shows invariants for "set" - containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="id-1.3.5.9.4.3.4.3.5"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers + containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="id-1.3.5.8.4.3.4.3.5"></a><p class="title"><strong>Figure 21.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers (hash-based associative containers) lack movement operators, such as <code class="literal">operator++</code> - in fact, this is the reason why this library differentiates from the standard C++ librarys @@ -344,7 +344,7 @@ to the question of whether point-type iterators and range-type iterators are valid. The graphic below shows tags corresponding to different types of invalidation guarantees. - </p><div class="figure"><a id="id-1.3.5.9.4.3.4.4.5"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> + </p><div class="figure"><a id="id-1.3.5.8.4.3.4.4.5"></a><p class="title"><strong>Figure 21.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> <code class="classname">basic_invalidation_guarantee</code> corresponds to a basic guarantee that a point-type iterator, a found pointer, or a found reference, remains valid as long @@ -428,7 +428,7 @@ </p><p> This library contains a container tag hierarchy corresponding to the diagram below. - </p><div class="figure"><a id="id-1.3.5.9.4.3.5.7.4"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p> + </p><div class="figure"><a id="id-1.3.5.8.4.3.5.7.4"></a><p class="title"><strong>Figure 21.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p> Given any container <span class="type">Cntnr</span>, the tag of the underlying data structure can be found via <code class="literal">typename Cntnr::container_category</code>. @@ -487,7 +487,7 @@ collision-chaining container, except for the following.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Comb_Probe_Fn</code> describes how to transform a probe sequence into a sequence of positions within the table.</p></li><li class="listitem"><p><code class="classname">Probe_Fn</code> describes a probe sequence policy.</p></li></ol></div><p>Some of the default template values depend on the values of other parameters, and are explained below.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.hash_policies"></a>Hash Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.general"></a>General</h6></div></div></div><p>Following is an explanation of some functions which hashing - involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="id-1.3.5.9.4.4.2.3.2.2.3"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and + involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="id-1.3.5.8.4.4.2.3.2.2.3"></a><p class="title"><strong>Figure 21.14. Hash functions, ranged-hash functions, and range-hashing functions</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_ranged_hash_range_hashing_fns.png" align="middle" alt="Hash functions, ranged-hash functions, and range-hashing functions" /></div></div></div><br class="figure-break" /><p>Let U be a domain (e.g., the integers, or the strings of 3 characters). A hash-table algorithm needs to map elements of U "uniformly" into the range [0,..., m - @@ -504,7 +504,7 @@ Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative range upper-bound into a non-negative integral in the range between 0 (inclusive) and the range upper bound (exclusive), - i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="id-1.3.5.9.4.4.2.3.2.2.15"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase"> + i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="id-1.3.5.8.4.4.2.3.2.2.15"></a><p class="title"><strong>Equation 21.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase"> f(u , m) = g(h(u), m) </span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and h, f can always be composed (however the converse @@ -524,7 +524,7 @@ transforming the sequence of hash values into a sequence of positions.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.range"></a>Range Hashing</h6></div></div></div><p>Some common choices for range-hashing functions are the division, multiplication, and middle-square methods (<a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), defined - as</p><div class="equation"><a id="id-1.3.5.9.4.4.2.3.2.3.3"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase"> + as</p><div class="equation"><a id="id-1.3.5.8.4.4.2.3.2.3.3"></a><p class="title"><strong>Equation 21.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase"> g(r, m) = r mod m </span></div></div><br class="equation-break" /><p>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</p><p>and</p><p>g(r, m) = ⌈ u/v ( r<sup>2</sup> mod v ) ⌉</p><p>respectively, for some positive integrals u and v (typically powers of 2), and some a. Each of @@ -535,9 +535,9 @@ implement using the low level % (modulo) operation (for any m), or the low level & (bit-mask) operation (for the case where - m is a power of 2), i.e.,</p><div class="equation"><a id="id-1.3.5.9.4.4.2.3.2.3.9"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase"> + m is a power of 2), i.e.,</p><div class="equation"><a id="id-1.3.5.8.4.4.2.3.2.3.9"></a><p class="title"><strong>Equation 21.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase"> g(r, m) = r % m - </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="id-1.3.5.9.4.4.2.3.2.3.11"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase"> + </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="id-1.3.5.8.4.4.2.3.2.3.11"></a><p class="title"><strong>Equation 21.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase"> g(r, m) = r & m - 1, (with m = 2<sup>k</sup> for some k) </span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for @@ -563,7 +563,7 @@ s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>] </p><p>be a string of t characters, each of which is from domain S. Consider the following ranged-hash - function:</p><div class="equation"><a id="id-1.3.5.9.4.4.2.3.2.4.7"></a><p class="title"><strong>Equation 22.5. + function:</p><div class="equation"><a id="id-1.3.5.8.4.4.2.3.2.4.7"></a><p class="title"><strong>Equation 21.5. A Standard String Hash Function </strong></p><div class="equation-contents"><span class="mathphrase"> f<sub>1</sub>(s, m) = ∑ <sub>i = @@ -575,7 +575,7 @@ of a long DNA sequence (and so S = {'A', 'C', 'G', 'T'}). In this case, scanning the entire string might be prohibitively expensive. A possible alternative might be to use - only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="id-1.3.5.9.4.4.2.3.2.4.12"></a><p class="title"><strong>Equation 22.6. + only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="id-1.3.5.8.4.4.2.3.2.4.12"></a><p class="title"><strong>Equation 21.6. Only k String DNA Hash </strong></p><div class="equation-contents"><span class="mathphrase"> f<sub>2</sub>(s, m) = ∑ <sub>i @@ -606,12 +606,12 @@ the container transforms the key into a non-negative integral using the hash functor (points B and C), and transforms the result into a position using the combining functor (points D - and E).</p><div class="figure"><a id="id-1.3.5.9.4.4.2.3.2.5.3.4"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s + and E).</p><div class="figure"><a id="id-1.3.5.8.4.4.2.3.2.5.3.4"></a><p class="title"><strong>Figure 21.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s hash-functor, <code class="classname">Hash_Fn</code> is instantiated by <code class="classname">null_type</code> , then <code class="classname">Comb_Hash_Fn</code> is taken to be a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence diagram. The user inserts an element (point A), the container transforms the key into a position using the combining functor - (points B and C).</p><div class="figure"><a id="id-1.3.5.9.4.4.2.3.2.5.3.6"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a> + (points B and C).</p><div class="figure"><a id="id-1.3.5.8.4.4.2.3.2.5.3.6"></a><p class="title"><strong>Figure 21.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a> Probing tables </h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by <code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>, @@ -634,7 +634,7 @@ a linear probe and a quadratic probe function, respectively.</p></li></ol></div><p> The graphic below shows the relationships. - </p><div class="figure"><a id="id-1.3.5.9.4.4.2.3.2.5.5.5"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or + </p><div class="figure"><a id="id-1.3.5.8.4.4.2.3.2.5.5.5"></a><p class="title"><strong>Figure 21.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or shrink. It is necessary to specify policies to determine how and when a hash table should change its size. Usually, resize policies can be decomposed into orthogonal policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A size policy indicating how a hash table @@ -667,10 +667,10 @@ and some load factor be denoted by Α. We would like to calculate the minimal length of k, such that if there were Α m elements in the hash table, a probe sequence of length k would - be found with probability at most 1/m.</p><div class="figure"><a id="id-1.3.5.9.4.4.2.3.3.4.7"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length + be found with probability at most 1/m.</p><div class="figure"><a id="id-1.3.5.8.4.4.2.3.3.4.7"></a><p class="title"><strong>Figure 21.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length k appears in bin i by p<sub>i</sub>, the length of the probe sequence of bin i by - l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="id-1.3.5.9.4.4.2.3.3.4.9"></a><p class="title"><strong>Equation 22.7. + l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="id-1.3.5.8.4.4.2.3.3.4.9"></a><p class="title"><strong>Equation 21.7. Probability of Probe Sequence of Length k </strong></p><div class="equation-contents"><span class="mathphrase"> p<sub>1</sub> = @@ -684,7 +684,7 @@ l<sub>i</sub> are negatively-dependent (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>) . Let - I(.) denote the indicator function. Then</p><div class="equation"><a id="id-1.3.5.9.4.4.2.3.3.4.14"></a><p class="title"><strong>Equation 22.8. + I(.) denote the indicator function. Then</p><div class="equation"><a id="id-1.3.5.8.4.4.2.3.3.4.14"></a><p class="title"><strong>Equation 21.8. Probability Probe Sequence in Some Bin </strong></p><div class="equation-contents"><span class="mathphrase"> P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) = @@ -723,7 +723,7 @@ a resize is needed, and if so, what is the new size (points D to G); following the resize, it notifies the policy that a resize has completed (point H); finally, the element is - inserted, and the policy notified (point I).</p><div class="figure"><a id="id-1.3.5.9.4.4.2.3.3.5.3.6"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally + inserted, and the policy notified (point I).</p><div class="figure"><a id="id-1.3.5.8.4.4.2.3.3.5.3.6"></a><p class="title"><strong>Figure 21.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally decomposed to a size policy and a trigger policy. Consequently, the library contains a single class for instantiating a resize policy: <code class="classname">hash_standard_resize_policy</code> @@ -732,8 +732,8 @@ both, and acts as a standard delegate (<a class="xref" href="policy_data_structures.html#biblio.gof" title="Design Patterns - Elements of Reusable Object-Oriented Software">[biblio.gof]</a>) to these policies.</p><p>The two graphics immediately below show sequence diagrams illustrating the interaction between the standard resize policy - and its trigger and size policies, respectively.</p><div class="figure"><a id="id-1.3.5.9.4.4.2.3.3.5.3.9"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence - diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="id-1.3.5.9.4.4.2.3.3.5.3.10"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence + and its trigger and size policies, respectively.</p><div class="figure"><a id="id-1.3.5.8.4.4.2.3.3.5.3.9"></a><p class="title"><strong>Figure 21.20. Standard resize policy trigger sequence + diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="id-1.3.5.8.4.4.2.3.3.5.3.10"></a><p class="title"><strong>Figure 21.21. Standard resize policy size sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram3.png" align="middle" alt="Standard resize policy size sequence diagram" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.predefined"></a>Predefined Policies</h6></div></div></div><p>The library includes the following instantiations of size and trigger policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">hash_load_check_resize_trigger</code> implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code> @@ -876,7 +876,7 @@ each node, and maintains node invariants (see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.) The first stores in each node the size of the sub-tree rooted at the node; the second stores at each node the maximal endpoint of the - intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="id-1.3.5.9.4.4.3.3.2.5"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of + intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="id-1.3.5.8.4.4.3.3.2.5"></a><p class="title"><strong>Figure 21.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of reasons:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>There must be a way to specify what a node's metadata should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node invariants. The graphic below shows how a right rotation, @@ -890,7 +890,7 @@ metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees can support. Besides the usual <code class="classname">find</code> method, the first tree can support a <code class="classname">find_by_order</code> method, while - the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="id-1.3.5.9.4.4.3.3.2.8"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means: + the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="id-1.3.5.8.4.4.3.3.2.8"></a><p class="title"><strong>Figure 21.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means: node iterators, and template-template node updater parameters.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.iterators"></a>Node Iterators</h6></div></div></div><p>Each tree-based container defines two additional iterator types, <code class="classname">const_node_iterator</code> @@ -919,7 +919,7 @@ <code class="classname">node_update</code> class, and publicly subclasses <code class="classname">node_update</code>. The graphic below shows this scheme, as well as some predefined policies (which are explained - below).</p><div class="figure"><a id="id-1.3.5.9.4.4.3.3.2.11.3"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of + below).</p><div class="figure"><a id="id-1.3.5.8.4.4.3.3.2.11.3"></a><p class="title"><strong>Figure 21.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of <code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as the type of metadata it requires. For order statistics, e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>. @@ -938,7 +938,7 @@ <code class="classname">nd_it</code>. For example, say node x in the graphic below label A has an invalid invariant, but its' children, y and z have valid invariants. After the invocation, all three - nodes should have valid invariants, as in label B.</p><div class="figure"><a id="id-1.3.5.9.4.4.3.3.2.11.8"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant, + nodes should have valid invariants, as in label B.</p><div class="figure"><a id="id-1.3.5.8.4.4.3.3.2.11.8"></a><p class="title"><strong>Figure 21.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant, it invokes this method in its <code class="classname">node_update</code> base to restore the invariant. For example, the graphic below shows an <code class="function">insert</code> operation (point A); the tree performs some @@ -946,7 +946,7 @@ C, and D). (It is well known that any <code class="function">insert</code>, <code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore all node invariants by a small number of node invariant updates (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>) - .</p><div class="figure"><a id="id-1.3.5.9.4.4.3.3.2.11.10"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions + .</p><div class="figure"><a id="id-1.3.5.8.4.4.3.3.2.11.10"></a><p class="title"><strong>Figure 21.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions need to be answered:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>How can a tree which supports order statistics define a method such as <code class="classname">find_by_order</code>?</p></li><li class="listitem"><p>How can the node updater base access methods of the tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved? @@ -988,7 +988,7 @@ node's metadata (this is halting reducible). In the graphic below, assume the shaded node is inserted. The tree would have to traverse the useless path shown to the root, applying - redundant updates all the way.</p></li></ol></div><div class="figure"><a id="id-1.3.5.9.4.4.3.3.2.11.20"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code> + redundant updates all the way.</p></li></ol></div><div class="figure"><a id="id-1.3.5.8.4.4.3.3.2.11.20"></a><p class="title"><strong>Figure 21.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code> solves both these problems. The tree detects that node invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.details.split"></a>Split and Join</h6></div></div></div><p>Tree-based containers support split and join methods. It is possible to split a tree so that it passes @@ -1071,7 +1071,7 @@ sub-tree with leafs "a" and "as". The maximal common prefix is "a". The internal node contains, consequently, to const iterators, one pointing to <code class="varname">'a'</code>, and the other to - <code class="varname">'s'</code>.</p><div class="figure"><a id="id-1.3.5.9.4.4.4.3.2.10"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do + <code class="varname">'s'</code>.</p><div class="figure"><a id="id-1.3.5.8.4.4.4.3.2.10"></a><p class="title"><strong>Figure 21.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do tree-based containers. There are two minor differences, though, which, unfortunately, thwart sharing them sharing the same node-updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A trie's <code class="classname">Node_Update</code> template-template @@ -1080,7 +1080,7 @@ parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while trie-based containers (at least in this implementation) store values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined - policies (which are explained below).</p><div class="figure"><a id="id-1.3.5.9.4.4.4.3.3.5"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node + policies (which are explained below).</p><div class="figure"><a id="id-1.3.5.8.4.4.4.3.3.5"></a><p class="title"><strong>Figure 21.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p> <code class="classname">trie_order_statistics_node_update</code> supports order statistics. @@ -1128,7 +1128,7 @@ simple list of integer keys. If we search for the integer 6, we are paying an overhead: the link with key 6 is only the fifth link; if it were the first link, it could be accessed - faster.</p><div class="figure"><a id="id-1.3.5.9.4.4.5.3.3.3"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are + faster.</p><div class="figure"><a id="id-1.3.5.8.4.4.5.3.3.3"></a><p class="title"><strong>Figure 21.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are accessed. They try to determine, by the access history, which keys to move to the front of the list. Some of these algorithms require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter @@ -1138,7 +1138,7 @@ predetermined value, say 10, as shown in label C, the count is set to 0 and the node is moved to the front of the list, as in label D. - </p><div class="figure"><a id="id-1.3.5.9.4.4.5.3.3.6"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies + </p><div class="figure"><a id="id-1.3.5.8.4.4.5.3.3.6"></a><p class="title"><strong>Figure 21.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies implementing any algorithm moving nodes to the front of the list (policies implementing algorithms interchanging nodes are unsupported).</p><p>Associative containers based on lists are parametrized by a @@ -1310,7 +1310,7 @@ sequence; the second uses a tree (or forest of trees), which is typically less structured than an associative container's tree; the third simply uses an associative container. These are - shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="id-1.3.5.9.4.4.6.3.3.3"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped + shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="id-1.3.5.8.4.4.6.3.3.3"></a><p class="title"><strong>Figure 21.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped from a priority queue must incur a logarithmic expense (in the amortized sense). Any priority queue implementation that would avoid this, would violate known bounds on comparison-based @@ -1390,7 +1390,7 @@ container <code class="classname">Cntnr</code>, the tag of the underlying data structure can be found via <code class="classname">typename Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below. - </p><div class="figure"><a id="id-1.3.5.9.4.4.6.3.4.4"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a + </p><div class="figure"><a id="id-1.3.5.8.4.4.6.3.4.4"></a><p class="title"><strong>Figure 21.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a container type for its attributes. Given any container <code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits<Cntnr></pre><p> is a traits class identifying the properties of the diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures_using.html b/libstdc++-v3/doc/html/manual/policy_data_structures_using.html index a45c64544b0..10c13bedeac 100644 --- a/libstdc++-v3/doc/html/manual/policy_data_structures_using.html +++ b/libstdc++-v3/doc/html/manual/policy_data_structures_using.html @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 21. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 21. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any other libraries except the standard C++ library . All classes are defined in namespace <code class="code">__gnu_pbds</code>. The library internally uses macros beginning with <code class="code">PB_DS</code>, but @@ -61,7 +61,7 @@ In addition, there are the following diagnostics classes, used to report errors specific to this library's data structures. - </p><div class="figure"><a id="id-1.3.5.9.3.3.6"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p> + </p><div class="figure"><a id="id-1.3.5.8.3.3.6"></a><p class="title"><strong>Figure 21.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p> For the most part, the policy-based containers containers in namespace <code class="literal">__gnu_pbds</code> have the same interface as the equivalent containers in the standard C++ library, except for @@ -479,4 +479,4 @@ very simple version of Dijkstra's shortest path algorithm: <code class="filename">priority_queue_dijkstra.cc</code> - </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Policy-Based Data Structures </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
\ No newline at end of file + </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. Policy-Based Data Structures </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/source_organization.html b/libstdc++-v3/doc/html/manual/source_organization.html index 92044484f69..102473c47a7 100644 --- a/libstdc++-v3/doc/html/manual/source_organization.html +++ b/libstdc++-v3/doc/html/manual/source_organization.html @@ -45,10 +45,8 @@ It has subdirectories: </dd><dt><span class="term"> <code class="filename">include/debug</code>, <code class="filename">include/parallel</code>, and - <code class="filename">include/profile</code> </span></dt><dd> - Headers that implement the Debug Mode, Parallel Mode, and Profile Mode - extensions. + Headers that implement the Debug Mode and Parallel Mode extensions. </dd></dl></div></dd><dt><span class="term"><code class="filename">scripts</code></span></dt><dd> Scripts that are used during the configure, build, make, or test process. diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index 7e1c1a36dac..97bb38c6674 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -91,7 +91,7 @@ particular release. <code class="code">std::type_info::name()</code> is the mangled type name. You will need to call <code class="code">c++filt</code> and pass the names as command-line parameters to demangle them, or call a - <a class="link" href="ext_demangling.html" title="Chapter 29. Demangling">runtime demangler function</a>. + <a class="link" href="ext_demangling.html" title="Chapter 28. Demangling">runtime demangler function</a>. </p><p><span class="emphasis"><em>[20.1.5]/5</em></span> <span class="emphasis"><em>"Implementors are encouraged to supply libraries that can accept allocators that encapsulate more general memory models and that support non-equal instances. In such @@ -1238,7 +1238,9 @@ Feature-testing recommendations for C++</a>. <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0591r4.pdf" target="_top"> P0591R4 </a> - </td><td align="center"> 9.1 </td><td align="left"> </td></tr><tr><td align="left"> P0595R2 <code class="code">std::is_constant_evaluated()</code> </td><td align="left"> + </td><td align="center"> 9.1 </td><td align="left"> + <code class="code">std::scoped_allocator_adaptor</code> changes missing in 9.1.0 + </td></tr><tr><td align="left"> P0595R2 <code class="code">std::is_constant_evaluated()</code> </td><td align="left"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0595r2.html" target="_top"> P0595R2 </a> diff --git a/libstdc++-v3/doc/html/manual/test.html b/libstdc++-v3/doc/html/manual/test.html index da801987cbd..ef56a305687 100644 --- a/libstdc++-v3/doc/html/manual/test.html +++ b/libstdc++-v3/doc/html/manual/test.html @@ -533,10 +533,7 @@ with specific options, and additional options for 32-bit x86: (as determined by the <code class="literal">_GLIBCXX_DEBUG</code> macro). </p></dd><dt><span class="term"><code class="literal">dg-require-parallel-mode ""</code></span></dt><dd><p>Skip the test if the Parallel Mode is not active (as determined by the <code class="literal">_GLIBCXX_PARALLEL</code> macro). - </p></dd><dt><span class="term"><code class="literal">dg-require-profile-mode ""</code></span></dt><dd><p>Skip the test if the Profile Mode is not active - (as determined by the <code class="literal">_GLIBCXX_PROFILE</code> macro). - </p></dd><dt><span class="term"><code class="literal">dg-require-normal-mode ""</code></span></dt><dd><p>Skip the test if any of Debug, Parallel or Profile - Mode is active. + </p></dd><dt><span class="term"><code class="literal">dg-require-normal-mode ""</code></span></dt><dd><p>Skip the test if Debug or Parallel Mode is active. </p></dd><dt><span class="term"><code class="literal">dg-require-atomic-builtins ""</code></span></dt><dd><p>Skip the test if atomic operations on <span class="type">bool</span> and <span class="type">int</span> are not lock-free. </p></dd><dt><span class="term"><code class="literal">dg-require-gthreads ""</code></span></dt><dd><p>Skip the test if the C++11 thread library is not diff --git a/libstdc++-v3/doc/html/manual/using.html b/libstdc++-v3/doc/html/manual/using.html index 355790d28de..140896b1f60 100644 --- a/libstdc++-v3/doc/html/manual/using.html +++ b/libstdc++-v3/doc/html/manual/using.html @@ -2,7 +2,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. Introduction -</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p> The set of features available in the GNU C++ library is shaped by several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC Command Options</a>. Options that impact libstdc++ are diff --git a/libstdc++-v3/doc/html/manual/using_headers.html b/libstdc++-v3/doc/html/manual/using_headers.html index 9cc1c19bbe5..0d5de91fe31 100644 --- a/libstdc++-v3/doc/html/manual/using_headers.html +++ b/libstdc++-v3/doc/html/manual/using_headers.html @@ -89,7 +89,7 @@ compiler supports scalar decimal floating-point types defined via Also included are files for the C++ ABI interface: </p><div class="table"><a id="table.abi_headers"></a><p class="title"><strong>Table 3.16. C++ ABI Headers</strong></p><div class="table-contents"><table class="table" summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p> And a large variety of extensions. -</p><div class="table"><a id="table.ext_headers"></a><p class="title"><strong>Table 3.17. Extension Headers</strong></p><div class="table-contents"><table class="table" summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td colspan="4" align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="table.debug_headers"></a><p class="title"><strong>Table 3.18. Extension Debug Headers</strong></p><div class="table-contents"><table class="table" summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/array</code></td><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/forward_list</code></td><td align="left"><code class="filename">debug/list</code></td></tr><tr><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td></tr><tr><td align="left"><code class="filename">debug/vector</code></td><td colspan="4" align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="table.profile_headers"></a><p class="title"><strong>Table 3.19. Extension Profile Headers</strong></p><div class="table-contents"><table class="table" summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="table.parallel_headers"></a><p class="title"><strong>Table 3.20. Extension Parallel Headers</strong></p><div class="table-contents"><table class="table" summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules. +</p><div class="table"><a id="table.ext_headers"></a><p class="title"><strong>Table 3.17. Extension Headers</strong></p><div class="table-contents"><table class="table" summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td><td class="auto-generated"> </td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td colspan="4" align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="table.debug_headers"></a><p class="title"><strong>Table 3.18. Extension Debug Headers</strong></p><div class="table-contents"><table class="table" summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/array</code></td><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/forward_list</code></td><td align="left"><code class="filename">debug/list</code></td></tr><tr><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td></tr><tr><td align="left"><code class="filename">debug/vector</code></td><td colspan="4" align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="table.parallel_headers"></a><p class="title"><strong>Table 3.19. Extension Parallel Headers</strong></p><div class="table-contents"><table class="table" summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules. </p><p>First, mixing different dialects of the standard headers is not possible. It's an all-or-nothing affair. Thus, code like </p><pre class="programlisting"> diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html index f4282c9034b..44afa81f614 100644 --- a/libstdc++-v3/doc/html/manual/using_macros.html +++ b/libstdc++-v3/doc/html/manual/using_macros.html @@ -103,9 +103,6 @@ <code class="code">_GLIBCXX_ASSERTIONS</code> has a non-zero value, otherwise to zero. When defined to a non-zero value, it enables extra error checking and assertions in the parallel mode. - </p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code - using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile - mode</a>. </p></dd><dt><span class="term"><code class="code">__STDCPP_WANT_MATH_SPEC_FUNCS__</code></span></dt><dd><p>Undefined by default. When defined to a non-zero integer constant, enables support for ISO/IEC 29124 Special Math Functions. </p></dd><dt><span class="term"><code class="code">_GLIBCXX_SANITIZE_VECTOR</code></span></dt><dd><p> diff --git a/libstdc++-v3/doc/xml/authors.xml b/libstdc++-v3/doc/xml/authors.xml index 1f26f63fbc6..0a120b508e9 100644 --- a/libstdc++-v3/doc/xml/authors.xml +++ b/libstdc++-v3/doc/xml/authors.xml @@ -92,12 +92,6 @@ </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 diff --git a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml index 41335475f3b..ff0ba66c6ed 100644 --- a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml +++ b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml @@ -292,11 +292,9 @@ It has subdirectories: <term> <filename class="directory">include/debug</filename>, <filename class="directory">include/parallel</filename>, and - <filename class="directory">include/profile</filename> </term> <listitem> - Headers that implement the Debug Mode, Parallel Mode, and Profile Mode - extensions. + Headers that implement the Debug Mode and Parallel Mode extensions. </listitem> </varlistentry> </variablelist> diff --git a/libstdc++-v3/doc/xml/manual/debug.xml b/libstdc++-v3/doc/xml/manual/debug.xml index 091e0b6914c..bb018569b39 100644 --- a/libstdc++-v3/doc/xml/manual/debug.xml +++ b/libstdc++-v3/doc/xml/manual/debug.xml @@ -354,12 +354,4 @@ </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/libstdc++-v3/doc/xml/manual/evolution.xml b/libstdc++-v3/doc/xml/manual/evolution.xml index 80288694056..010907a2f6b 100644 --- a/libstdc++-v3/doc/xml/manual/evolution.xml +++ b/libstdc++-v3/doc/xml/manual/evolution.xml @@ -948,7 +948,13 @@ now defaults to zero. </section> <section xml:id="api.rel_101"><info><title><constant>10</constant></title></info> -<para> <classname>__gnu_cxx::array_allocator</classname> removed. </para> +<para> Deprecated features removed: +<itemizedlist> +<listitem> Profile Mode </listitem> +<listitem> <classname>__gnu_cxx::array_allocator</classname> </listitem> +</itemizedlist> +</para> + </section> </section> diff --git a/libstdc++-v3/doc/xml/manual/extensions.xml b/libstdc++-v3/doc/xml/manual/extensions.xml index 8912e39557a..86e92beffd3 100644 --- a/libstdc++-v3/doc/xml/manual/extensions.xml +++ b/libstdc++-v3/doc/xml/manual/extensions.xml @@ -107,12 +107,6 @@ extensions, be aware of two things: 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 --> diff --git a/libstdc++-v3/doc/xml/manual/profile_mode.xml b/libstdc++-v3/doc/xml/manual/profile_mode.xml deleted file mode 100644 index fa1b7c993c3..00000000000 --- a/libstdc++-v3/doc/xml/manual/profile_mode.xml +++ /dev/null @@ -1,1718 +0,0 @@ -<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 the - <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://ieeexplore.ieee.org/document/4907670/">Perflint - 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 <vector> -int main() { - vector<int> v; - for (int k = 0; k < 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_<name> or by setting variable <name> - in the environment where the program is run, before starting execution. - <itemizedlist> - <listitem><para> - <code>_GLIBCXX_PROFILE_NO_<diagnostic></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" xml:id="table.profile_code_loc"> -<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_<diagnostic></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="https://ieeexplore.ieee.org/document/4907670/">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 <profile/vector> -#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_GLIBCXX_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<__magic_info, - __magic_stack_info></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_<diagnostic></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" xml:id="table.profile_diagnostics"> -<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_<diagnostic></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<int> us; -2 for (int k = 0; k < 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<unordered_set<int>> v(100000, unordered_set<int>(100)) ; -2 for (int k = 0; k < 100000; ++k) { -3 for (int j = 0; j < 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<int, dumb_hash> hs; - ... - for (int i = 0; i < 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<int> v; -2 for (int k = 0; k < 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<vector<int>> v(100000, vector<int>(100)) ; -2 for (int k = 0; k < 100000; ++k) { -3 for (int j = 0; j < 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<int> v; -... -2 for (int i = 0; i < 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<int> us; -... -2 int s = 0; -3 for (unordered_set<int>::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<int> v; -2 for (int i = 0; i < 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<int> l; -... -2 int sum = 0; -3 for (list<int>::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<int> l; -... -2 int sum = 0; -3 for (list<int>::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<int> s; -2 for (int i = 0; i < 100000; ++i) { -3 s.insert(i); -4 } -5 int sum = 0; -6 for (int i = 0; i < 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="https://ieeexplore.ieee.org/document/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<int*> v(10000000, &zero); -3 for (int k = 0; k < 10000000; ++k) { -4 v[random() % 10000000] = new int(k); -5 } -6 for (int j = 0; j < 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="https://parasol.tamu.edu/publications/download.php?file_id=570"> - Custom Memory Allocation for Free</link> by Jula and Rauchwerger. - </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<int> s; - 2 for (int i = 0; i < 10000000; ++i) { - 3 s.insert(i); - 4 } - 5 set<int> s1, s2; - 6 for (int i = 0; i < 10000000; ++i) { - 7 s1.insert(i); - 8 s2.insert(i); - 9 } -... - // Fast, better locality. -10 for (set<int>::iterator it = s.begin(); it != s.end(); ++it) { -11 sum += *it; -12 } - // Slow, elements are further apart. -13 for (set<int>::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<int> v(2, 0); -2 #pragma omp parallel for shared(v, SIZE) schedule(static, 1) -3 for (i = 0; i < 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/libstdc++-v3/doc/xml/manual/spine.xml b/libstdc++-v3/doc/xml/manual/spine.xml index 2b6973ba0ae..a2cc1294e73 100644 --- a/libstdc++-v3/doc/xml/manual/spine.xml +++ b/libstdc++-v3/doc/xml/manual/spine.xml @@ -126,12 +126,6 @@ </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 diff --git a/libstdc++-v3/doc/xml/manual/test.xml b/libstdc++-v3/doc/xml/manual/test.xml index 1725cdb69f3..19bc9e81ff3 100644 --- a/libstdc++-v3/doc/xml/manual/test.xml +++ b/libstdc++-v3/doc/xml/manual/test.xml @@ -857,14 +857,8 @@ with specific options, and additional options for 32-bit x86: (as determined by the <literal>_GLIBCXX_PARALLEL</literal> macro). </para></listitem> </varlistentry> - <varlistentry><term><literal>dg-require-profile-mode ""</literal></term> - <listitem><para>Skip the test if the Profile Mode is not active - (as determined by the <literal>_GLIBCXX_PROFILE</literal> macro). - </para></listitem> - </varlistentry> <varlistentry><term><literal>dg-require-normal-mode ""</literal></term> - <listitem><para>Skip the test if any of Debug, Parallel or Profile - Mode is active. + <listitem><para>Skip the test if Debug or Parallel Mode is active. </para></listitem> </varlistentry> <varlistentry><term><literal>dg-require-atomic-builtins ""</literal></term> diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml index a97099989a1..d7fbfe9584d 100644 --- a/libstdc++-v3/doc/xml/manual/using.xml +++ b/libstdc++-v3/doc/xml/manual/using.xml @@ -804,36 +804,6 @@ compiler supports scalar decimal floating-point types defined via <para/> -<table frame="all" xml:id="table.profile_headers"> -<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" xml:id="table.parallel_headers"> <title>Extension Parallel Headers</title> @@ -1175,14 +1145,6 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe </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> - <varlistentry><term><code>__STDCPP_WANT_MATH_SPEC_FUNCS__</code></term> <listitem> <para>Undefined by default. When defined to a non-zero integer constant, diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index f8f126fbc7d..0880dc43e1f 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -919,45 +919,6 @@ parallel_headers = \ ${parallel_srcdir}/unique_copy.h \ ${parallel_srcdir}/workstealing.h -# Profile mode headers -profile_srcdir = ${glibcxx_srcdir}/include/profile -profile_builddir = ./profile -profile_headers = \ - ${profile_srcdir}/array \ - ${profile_srcdir}/base.h \ - ${profile_srcdir}/unordered_base.h \ - ${profile_srcdir}/unordered_map \ - ${profile_srcdir}/unordered_set \ - ${profile_srcdir}/vector \ - ${profile_srcdir}/bitset \ - ${profile_srcdir}/deque \ - ${profile_srcdir}/forward_list \ - ${profile_srcdir}/list \ - ${profile_srcdir}/map \ - ${profile_srcdir}/map.h \ - ${profile_srcdir}/multimap.h \ - ${profile_srcdir}/multiset.h \ - ${profile_srcdir}/ordered_base.h \ - ${profile_srcdir}/set \ - ${profile_srcdir}/set.h \ - ${profile_srcdir}/iterator_tracker.h -profile_impl_srcdir = ${glibcxx_srcdir}/include/profile/impl -profile_impl_builddir = ./profile/impl -profile_impl_headers = \ - ${profile_impl_srcdir}/profiler.h \ - ${profile_impl_srcdir}/profiler_algos.h \ - ${profile_impl_srcdir}/profiler_container_size.h \ - ${profile_impl_srcdir}/profiler_hash_func.h \ - ${profile_impl_srcdir}/profiler_hashtable_size.h \ - ${profile_impl_srcdir}/profiler_map_to_unordered_map.h \ - ${profile_impl_srcdir}/profiler_node.h \ - ${profile_impl_srcdir}/profiler_state.h \ - ${profile_impl_srcdir}/profiler_trace.h \ - ${profile_impl_srcdir}/profiler_vector_size.h \ - ${profile_impl_srcdir}/profiler_vector_to_list.h \ - ${profile_impl_srcdir}/profiler_list_to_vector.h \ - ${profile_impl_srcdir}/profiler_list_to_slist.h - # Some "C" header schemes require the "C" compatibility headers. # For --enable-cheaders=c_std if GLIBCXX_C_HEADERS_COMPATIBILITY @@ -1043,7 +1004,7 @@ allstamped = \ stamp-std stamp-bits stamp-bits-sup stamp-pstl stamp-c_base stamp-c_compatibility \ stamp-backward stamp-ext stamp-pb stamp-tr1 stamp-tr2 stamp-decimal \ stamp-experimental stamp-experimental-bits stamp-debug stamp-parallel \ - stamp-profile stamp-profile-impl stamp-host + stamp-host # List of all files that are created by explicit building, editing, or # catenation. @@ -1191,16 +1152,6 @@ stamp-parallel: ${parallel_headers} @-cd ${parallel_builddir} && $(LN_S) $? . 2>/dev/null @$(STAMP) stamp-parallel -stamp-profile: ${profile_headers} - @-mkdir -p ${profile_builddir} - @-cd ${profile_builddir} && $(LN_S) $? . 2>/dev/null - @$(STAMP) stamp-profile - -stamp-profile-impl: ${profile_impl_headers} - @-mkdir -p ${profile_impl_builddir} - @-cd ${profile_impl_builddir} && $(LN_S) $? . 2>/dev/null - @$(STAMP) stamp-profile-impl - stamp-${host_alias}: @-mkdir -p ${host_builddir} @-mkdir -p ${host_builddir}/../ext @@ -1498,12 +1449,6 @@ install-headers: $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${parallel_builddir} for file in ${parallel_headers}; do \ $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${parallel_builddir}; done - $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${profile_builddir} - for file in ${profile_headers}; do \ - $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${profile_builddir}; done - $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${profile_impl_builddir} - for file in ${profile_impl_headers}; do \ - $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${profile_impl_builddir}; done $(mkinstalldirs) $(DESTDIR)${host_installdir} for file in ${host_headers} ${bits_host_headers} ${host_headers_extra} \ ${thread_host_headers}; do \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 31e83eab7ec..04a2dc8a629 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -1257,47 +1257,6 @@ parallel_headers = \ ${parallel_srcdir}/unique_copy.h \ ${parallel_srcdir}/workstealing.h - -# Profile mode headers -profile_srcdir = ${glibcxx_srcdir}/include/profile -profile_builddir = ./profile -profile_headers = \ - ${profile_srcdir}/array \ - ${profile_srcdir}/base.h \ - ${profile_srcdir}/unordered_base.h \ - ${profile_srcdir}/unordered_map \ - ${profile_srcdir}/unordered_set \ - ${profile_srcdir}/vector \ - ${profile_srcdir}/bitset \ - ${profile_srcdir}/deque \ - ${profile_srcdir}/forward_list \ - ${profile_srcdir}/list \ - ${profile_srcdir}/map \ - ${profile_srcdir}/map.h \ - ${profile_srcdir}/multimap.h \ - ${profile_srcdir}/multiset.h \ - ${profile_srcdir}/ordered_base.h \ - ${profile_srcdir}/set \ - ${profile_srcdir}/set.h \ - ${profile_srcdir}/iterator_tracker.h - -profile_impl_srcdir = ${glibcxx_srcdir}/include/profile/impl -profile_impl_builddir = ./profile/impl -profile_impl_headers = \ - ${profile_impl_srcdir}/profiler.h \ - ${profile_impl_srcdir}/profiler_algos.h \ - ${profile_impl_srcdir}/profiler_container_size.h \ - ${profile_impl_srcdir}/profiler_hash_func.h \ - ${profile_impl_srcdir}/profiler_hashtable_size.h \ - ${profile_impl_srcdir}/profiler_map_to_unordered_map.h \ - ${profile_impl_srcdir}/profiler_node.h \ - ${profile_impl_srcdir}/profiler_state.h \ - ${profile_impl_srcdir}/profiler_trace.h \ - ${profile_impl_srcdir}/profiler_vector_size.h \ - ${profile_impl_srcdir}/profiler_vector_to_list.h \ - ${profile_impl_srcdir}/profiler_list_to_vector.h \ - ${profile_impl_srcdir}/profiler_list_to_slist.h - @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@c_compatibility_headers_extra = # Some "C" header schemes require the "C" compatibility headers. @@ -1376,7 +1335,7 @@ allstamped = \ stamp-std stamp-bits stamp-bits-sup stamp-pstl stamp-c_base stamp-c_compatibility \ stamp-backward stamp-ext stamp-pb stamp-tr1 stamp-tr2 stamp-decimal \ stamp-experimental stamp-experimental-bits stamp-debug stamp-parallel \ - stamp-profile stamp-profile-impl stamp-host + stamp-host # List of all files that are created by explicit building, editing, or @@ -1694,16 +1653,6 @@ stamp-parallel: ${parallel_headers} @-cd ${parallel_builddir} && $(LN_S) $? . 2>/dev/null @$(STAMP) stamp-parallel -stamp-profile: ${profile_headers} - @-mkdir -p ${profile_builddir} - @-cd ${profile_builddir} && $(LN_S) $? . 2>/dev/null - @$(STAMP) stamp-profile - -stamp-profile-impl: ${profile_impl_headers} - @-mkdir -p ${profile_impl_builddir} - @-cd ${profile_impl_builddir} && $(LN_S) $? . 2>/dev/null - @$(STAMP) stamp-profile-impl - stamp-${host_alias}: @-mkdir -p ${host_builddir} @-mkdir -p ${host_builddir}/../ext @@ -1974,12 +1923,6 @@ install-headers: $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${parallel_builddir} for file in ${parallel_headers}; do \ $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${parallel_builddir}; done - $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${profile_builddir} - for file in ${profile_headers}; do \ - $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${profile_builddir}; done - $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${profile_impl_builddir} - for file in ${profile_impl_headers}; do \ - $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${profile_impl_builddir}; done $(mkinstalldirs) $(DESTDIR)${host_installdir} for file in ${host_headers} ${bits_host_headers} ${host_headers_extra} \ ${thread_host_headers}; do \ diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index ca1557af564..6b7d54ed1f4 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -207,7 +207,6 @@ { namespace __debug { } namespace __parallel { } - namespace __profile { } namespace __cxx1998 { } namespace __detail { @@ -325,9 +324,8 @@ _GLIBCXX_END_NAMESPACE_VERSION # define _GLIBCXX_END_NAMESPACE_VERSION #endif -// Inline namespaces for special modes: debug, parallel, profile. -#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL) \ - || defined(_GLIBCXX_PROFILE) +// Inline namespaces for special modes: debug, parallel. +#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL) namespace std { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -351,23 +349,12 @@ _GLIBCXX_END_NAMESPACE_VERSION # ifdef _GLIBCXX_PARALLEL inline namespace __parallel { } # endif - - // Inline namespaces for profile mode -# ifdef _GLIBCXX_PROFILE - inline namespace __profile { } -# endif } // Check for invalid usage and unsupported mixed-mode use. # if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_PARALLEL) # error illegal use of multiple inlined namespaces # endif -# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_DEBUG) -# error illegal use of multiple inlined namespaces -# endif -# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_PARALLEL) -# error illegal use of multiple inlined namespaces -# endif // Check for invalid use due to lack for weak symbols. # if __NO_INLINE__ && !__GXX_WEAK__ @@ -386,7 +373,7 @@ _GLIBCXX_END_NAMESPACE_VERSION // _GLIBCXX_END_NAMESPACE_ALGO // _GLIBCXX_BEGIN_NAMESPACE_CONTAINER // _GLIBCXX_END_NAMESPACE_CONTAINER -#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE) +#if defined(_GLIBCXX_DEBUG) # define _GLIBCXX_STD_C __cxx1998 # define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \ namespace _GLIBCXX_STD_C { diff --git a/libstdc++-v3/include/profile/array b/libstdc++-v3/include/profile/array deleted file mode 100644 index 8f80e2a067f..00000000000 --- a/libstdc++-v3/include/profile/array +++ /dev/null @@ -1,281 +0,0 @@ -// Profile array implementation -*- C++ -*- - -// Copyright (C) 2012-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/array - * This is a Standard C++ Library header. - */ - -#ifndef _GLIBCXX_PROFILE_ARRAY -#define _GLIBCXX_PROFILE_ARRAY 1 - -#pragma GCC system_header - -#include <array> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - template<typename _Tp, std::size_t _Nm> - struct array - { - typedef _Tp value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef value_type* iterator; - typedef const value_type* const_iterator; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - - // Support for zero-sized arrays mandatory. - typedef _GLIBCXX_STD_C::__array_traits<_Tp, _Nm> _AT_Type; - typename _AT_Type::_Type _M_elems; - - // No explicit construct/copy/destroy for aggregate type. - - // DR 776. - void - fill(const value_type& __u) - { std::fill_n(begin(), size(), __u); } - - void - swap(array& __other) - noexcept(_AT_Type::_Is_nothrow_swappable::value) - { std::swap_ranges(begin(), end(), __other.begin()); } - - // Iterators. - _GLIBCXX17_CONSTEXPR iterator - begin() noexcept - { return iterator(data()); } - - _GLIBCXX17_CONSTEXPR const_iterator - begin() const noexcept - { return const_iterator(data()); } - - _GLIBCXX17_CONSTEXPR iterator - end() noexcept - { return iterator(data() + _Nm); } - - _GLIBCXX17_CONSTEXPR const_iterator - end() const noexcept - { return const_iterator(data() + _Nm); } - - _GLIBCXX17_CONSTEXPR reverse_iterator - rbegin() noexcept - { return reverse_iterator(end()); } - - _GLIBCXX17_CONSTEXPR const_reverse_iterator - rbegin() const noexcept - { return const_reverse_iterator(end()); } - - _GLIBCXX17_CONSTEXPR reverse_iterator - rend() noexcept - { return reverse_iterator(begin()); } - - _GLIBCXX17_CONSTEXPR const_reverse_iterator - rend() const noexcept - { return const_reverse_iterator(begin()); } - - _GLIBCXX17_CONSTEXPR const_iterator - cbegin() const noexcept - { return const_iterator(data()); } - - _GLIBCXX17_CONSTEXPR const_iterator - cend() const noexcept - { return const_iterator(data() + _Nm); } - - _GLIBCXX17_CONSTEXPR const_reverse_iterator - crbegin() const noexcept - { return const_reverse_iterator(end()); } - - _GLIBCXX17_CONSTEXPR const_reverse_iterator - crend() const noexcept - { return const_reverse_iterator(begin()); } - - // Capacity. - constexpr size_type - size() const noexcept { return _Nm; } - - constexpr size_type - max_size() const noexcept { return _Nm; } - - _GLIBCXX_NODISCARD constexpr bool - empty() const noexcept { return size() == 0; } - - // Element access. - reference - operator[](size_type __n) noexcept - { return _AT_Type::_S_ref(_M_elems, __n); } - - constexpr const_reference - operator[](size_type __n) const noexcept - { return _AT_Type::_S_ref(_M_elems, __n); } - - _GLIBCXX17_CONSTEXPR reference - at(size_type __n) - { - if (__n >= _Nm) - std::__throw_out_of_range_fmt(__N("array::at: __n " - "(which is %zu) >= _Nm " - "(which is %zu)"), - __n, _Nm); - return _AT_Type::_S_ref(_M_elems, __n); - } - - constexpr const_reference - at(size_type __n) const - { - // Result of conditional expression must be an lvalue so use - // boolean ? lvalue : (throw-expr, lvalue) - return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n) - : (std::__throw_out_of_range_fmt(__N("array::at: __n (which is %zu) " - ">= _Nm (which is %zu)"), - __n, _Nm), - _AT_Type::_S_ref(_M_elems, 0)); - } - - _GLIBCXX17_CONSTEXPR reference - front() noexcept - { return *begin(); } - - constexpr const_reference - front() const noexcept - { return _AT_Type::_S_ref(_M_elems, 0); } - - _GLIBCXX17_CONSTEXPR reference - back() noexcept - { return _Nm ? *(end() - 1) : *end(); } - - constexpr const_reference - back() const noexcept - { - return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1) - : _AT_Type::_S_ref(_M_elems, 0); - } - - _GLIBCXX17_CONSTEXPR pointer - data() noexcept - { return _AT_Type::_S_ptr(_M_elems); } - - _GLIBCXX17_CONSTEXPR const_pointer - data() const noexcept - { return _AT_Type::_S_ptr(_M_elems); } - }; - - // Array comparisons. - template<typename _Tp, std::size_t _Nm> - inline bool - operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return std::equal(__one.begin(), __one.end(), __two.begin()); } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one == __two); } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) - { - return std::lexicographical_compare(__a.begin(), __a.end(), - __b.begin(), __b.end()); - } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return __two < __one; } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one > __two); } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one < __two); } - - // Specialized algorithms. - template<typename _Tp, std::size_t _Nm> - inline void - swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two) - noexcept(noexcept(__one.swap(__two))) - { __one.swap(__two); } - - template<std::size_t _Int, typename _Tp, std::size_t _Nm> - constexpr _Tp& - get(array<_Tp, _Nm>& __arr) noexcept - { - static_assert(_Int < _Nm, "index is out of bounds"); - return _GLIBCXX_STD_C::__array_traits<_Tp, _Nm>:: - _S_ref(__arr._M_elems, _Int); - } - - template<std::size_t _Int, typename _Tp, std::size_t _Nm> - constexpr _Tp&& - get(array<_Tp, _Nm>&& __arr) noexcept - { - static_assert(_Int < _Nm, "index is out of bounds"); - return std::move(__profile::get<_Int>(__arr)); - } - - template<std::size_t _Int, typename _Tp, std::size_t _Nm> - constexpr const _Tp& - get(const array<_Tp, _Nm>& __arr) noexcept - { - static_assert(_Int < _Nm, "index is out of bounds"); - return _GLIBCXX_STD_C::__array_traits<_Tp, _Nm>:: - _S_ref(__arr._M_elems, _Int); - } -} // namespace __profile - -_GLIBCXX_BEGIN_NAMESPACE_VERSION - // Tuple interface to class template array. - - /// tuple_size - template<typename _Tp, std::size_t _Nm> - struct tuple_size<std::__profile::array<_Tp, _Nm>> - : public integral_constant<std::size_t, _Nm> { }; - - /// tuple_element - template<std::size_t _Int, typename _Tp, std::size_t _Nm> - struct tuple_element<_Int, std::__profile::array<_Tp, _Nm>> - { - static_assert(_Int < _Nm, "index is out of bounds"); - typedef _Tp type; - }; - - template<typename _Tp, std::size_t _Nm> - struct __is_tuple_like_impl<std::__profile::array<_Tp, _Nm>> : true_type - { }; - -_GLIBCXX_END_NAMESPACE_VERSION -} // namespace std - -#endif // _GLIBCXX_PROFILE_ARRAY diff --git a/libstdc++-v3/include/profile/base.h b/libstdc++-v3/include/profile/base.h deleted file mode 100644 index 692db3fae35..00000000000 --- a/libstdc++-v3/include/profile/base.h +++ /dev/null @@ -1,58 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/base.h - * @brief Sequential helper functions. - * This file is a GNU profile extension to the Standard C++ Library. - */ - -// Written by Lixia Liu - -#ifndef _GLIBCXX_PROFILE_BASE_H -#define _GLIBCXX_PROFILE_BASE_H 1 - -#include <profile/impl/profiler.h> - -// Profiling mode namespaces. - -/** - * @namespace std::__profile - * @brief GNU profile code, replaces standard behavior with profile behavior. - */ -namespace std _GLIBCXX_VISIBILITY(default) -{ - namespace __profile { } -} - -/** - * @namespace __gnu_profile - * @brief GNU profile code for public use. - */ -namespace __gnu_profile -{ - // Import all the profile versions of components in namespace std. - using namespace std::__profile; -} - - -#endif /* _GLIBCXX_PROFILE_BASE_H */ diff --git a/libstdc++-v3/include/profile/bitset b/libstdc++-v3/include/profile/bitset deleted file mode 100644 index 5887707b660..00000000000 --- a/libstdc++-v3/include/profile/bitset +++ /dev/null @@ -1,245 +0,0 @@ -// Profiling bitset implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/bitset - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_BITSET -#define _GLIBCXX_PROFILE_BITSET - -#include <bitset> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /// Class std::bitset wrapper with performance instrumentation, none at the - /// moment. - template<size_t _Nb> - class bitset - : public _GLIBCXX_STD_C::bitset<_Nb> - { - typedef _GLIBCXX_STD_C::bitset<_Nb> _Base; - - public: - // 23.3.5.1 constructors: -#if __cplusplus < 201103L - bitset() - : _Base() { } -#else - constexpr bitset() = default; -#endif - -#if __cplusplus >= 201103L - constexpr bitset(unsigned long long __val) noexcept -#else - bitset(unsigned long __val) -#endif - : _Base(__val) { } - - template<typename _CharT, typename _Traits, typename _Alloc> - explicit - bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __str, - typename std::basic_string<_CharT, _Traits, _Alloc>::size_type - __pos = 0, - typename std::basic_string<_CharT, _Traits, _Alloc>::size_type - __n = (std::basic_string<_CharT, _Traits, _Alloc>::npos)) - : _Base(__str, __pos, __n) { } - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 396. what are characters zero and one. - template<class _CharT, class _Traits, class _Alloc> - bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __str, - typename std::basic_string<_CharT, _Traits, _Alloc>::size_type - __pos, - typename std::basic_string<_CharT, _Traits, _Alloc>::size_type - __n, - _CharT __zero, _CharT __one = _CharT('1')) - : _Base(__str, __pos, __n, __zero, __one) { } - - bitset(const _Base& __x) : _Base(__x) { } - -#if __cplusplus >= 201103L - template<typename _CharT> - explicit - bitset(const _CharT* __str, - typename std::basic_string<_CharT>::size_type __n - = std::basic_string<_CharT>::npos, - _CharT __zero = _CharT('0'), _CharT __one = _CharT('1')) - : _Base(__str, __n, __zero, __one) { } -#endif - - // 23.3.5.2 bitset operations: - bitset<_Nb>& - operator&=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT - { - _M_base() &= __rhs; - return *this; - } - - bitset<_Nb>& - operator|=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT - { - _M_base() |= __rhs; - return *this; - } - - bitset<_Nb>& - operator^=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT - { - _M_base() ^= __rhs; - return *this; - } - - bitset<_Nb>& - operator<<=(size_t __pos) _GLIBCXX_NOEXCEPT - { - _M_base() <<= __pos; - return *this; - } - - bitset<_Nb>& - operator>>=(size_t __pos) _GLIBCXX_NOEXCEPT - { - _M_base() >>= __pos; - return *this; - } - - bitset<_Nb>& - set() _GLIBCXX_NOEXCEPT - { - _Base::set(); - return *this; - } - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 186. bitset::set() second parameter should be bool - bitset<_Nb>& - set(size_t __pos, bool __val = true) - { - _Base::set(__pos, __val); - return *this; - } - - bitset<_Nb>& - reset() _GLIBCXX_NOEXCEPT - { - _Base::reset(); - return *this; - } - - bitset<_Nb>& - reset(size_t __pos) - { - _Base::reset(__pos); - return *this; - } - - bitset<_Nb> - operator~() const _GLIBCXX_NOEXCEPT - { return bitset(~_M_base()); } - - bitset<_Nb>& - flip() _GLIBCXX_NOEXCEPT - { - _Base::flip(); - return *this; - } - - bitset<_Nb>& - flip(size_t __pos) - { - _Base::flip(__pos); - return *this; - } - - bool - operator==(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT - { return _M_base() == __rhs; } - - bool - operator!=(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT - { return _M_base() != __rhs; } - - bitset<_Nb> - operator<<(size_t __pos) const _GLIBCXX_NOEXCEPT - { return bitset<_Nb>(_M_base() << __pos); } - - bitset<_Nb> - operator>>(size_t __pos) const _GLIBCXX_NOEXCEPT - { return bitset<_Nb>(_M_base() >> __pos); } - - _Base& - _M_base() _GLIBCXX_NOEXCEPT - { return *this; } - - const _Base& - _M_base() const _GLIBCXX_NOEXCEPT - { return *this; } - }; - - template<size_t _Nb> - bitset<_Nb> - operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT - { return bitset<_Nb>(__x) &= __y; } - - template<size_t _Nb> - bitset<_Nb> - operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT - { return bitset<_Nb>(__x) |= __y; } - - template<size_t _Nb> - bitset<_Nb> - operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT - { return bitset<_Nb>(__x) ^= __y; } - - template<typename _CharT, typename _Traits, size_t _Nb> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, bitset<_Nb>& __x) - { return __is >> __x._M_base(); } - - template<typename _CharT, typename _Traits, size_t _Nb> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const bitset<_Nb>& __x) - { return __os << __x._M_base(); } -} // namespace __profile - -#if __cplusplus >= 201103L - // DR 1182. - /// std::hash specialization for bitset. - template<size_t _Nb> - struct hash<__profile::bitset<_Nb>> - : public __hash_base<size_t, __profile::bitset<_Nb>> - { - size_t - operator()(const __profile::bitset<_Nb>& __b) const noexcept - { return std::hash<_GLIBCXX_STD_C::bitset<_Nb>>()(__b._M_base()); } - }; -#endif - -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/deque b/libstdc++-v3/include/profile/deque deleted file mode 100644 index 4fd526a824d..00000000000 --- a/libstdc++-v3/include/profile/deque +++ /dev/null @@ -1,188 +0,0 @@ -// Profiling deque implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/deque - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_DEQUE -#define _GLIBCXX_PROFILE_DEQUE 1 - -#include <deque> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /// Class std::deque wrapper with performance instrumentation. - template<typename _Tp, typename _Allocator = std::allocator<_Tp> > - class deque - : public _GLIBCXX_STD_C::deque<_Tp, _Allocator> - { - typedef _GLIBCXX_STD_C::deque<_Tp, _Allocator> _Base; - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::value_type value_type; - - // 23.2.1.1 construct/copy/destroy: - -#if __cplusplus < 201103L - deque() - : _Base() { } - deque(const deque& __x) - : _Base(__x) { } - - ~deque() { } -#else - deque() = default; - deque(const deque&) = default; - deque(deque&&) = default; - - deque(const deque& __d, const _Allocator& __a) - : _Base(__d, __a) { } - - deque(deque&& __d, const _Allocator& __a) - : _Base(std::move(__d), __a) { } - - ~deque() = default; - - deque(initializer_list<value_type> __l, - const _Allocator& __a = _Allocator()) - : _Base(__l, __a) { } -#endif - - explicit - deque(const _Allocator& __a) - : _Base(__a) { } - -#if __cplusplus >= 201103L - explicit - deque(size_type __n, const _Allocator& __a = _Allocator()) - : _Base(__n, __a) { } - - deque(size_type __n, const _Tp& __value, - const _Allocator& __a = _Allocator()) - : _Base(__n, __value, __a) { } -#else - explicit - deque(size_type __n, const _Tp& __value = _Tp(), - const _Allocator& __a = _Allocator()) - : _Base(__n, __value, __a) { } -#endif - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> -#else - template<typename _InputIterator> -#endif - deque(_InputIterator __first, _InputIterator __last, - const _Allocator& __a = _Allocator()) - : _Base(__first, __last, __a) - { } - - deque(const _Base& __x) - : _Base(__x) { } - -#if __cplusplus < 201103L - deque& - operator=(const deque& __x) - { - _M_base() = __x; - return *this; - } -#else - deque& - operator=(const deque&) = default; - - deque& - operator=(deque&&) = default; - - deque& - operator=(initializer_list<value_type> __l) - { - _M_base() = __l; - return *this; - } -#endif - - void - swap(deque& __x) - _GLIBCXX_NOEXCEPT_IF( noexcept(declval<_Base&>().swap(__x)) ) - { _Base::swap(__x); } - - _Base& - _M_base() _GLIBCXX_NOEXCEPT { return *this; } - - const _Base& - _M_base() const _GLIBCXX_NOEXCEPT { return *this; } - }; - - template<typename _Tp, typename _Alloc> - inline bool - operator==(const deque<_Tp, _Alloc>& __lhs, - const deque<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() == __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator!=(const deque<_Tp, _Alloc>& __lhs, - const deque<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() != __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator<(const deque<_Tp, _Alloc>& __lhs, - const deque<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() < __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator<=(const deque<_Tp, _Alloc>& __lhs, - const deque<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() <= __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator>=(const deque<_Tp, _Alloc>& __lhs, - const deque<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() >= __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator>(const deque<_Tp, _Alloc>& __lhs, - const deque<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() > __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline void - swap(deque<_Tp, _Alloc>& __lhs, deque<_Tp, _Alloc>& __rhs) - _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs))) - { __lhs.swap(__rhs); } - -} // namespace __profile -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/forward_list b/libstdc++-v3/include/profile/forward_list deleted file mode 100644 index 6ac33bead84..00000000000 --- a/libstdc++-v3/include/profile/forward_list +++ /dev/null @@ -1,219 +0,0 @@ -// <forward_list> -*- C++ -*- - -// Copyright (C) 2010-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/forward_list - * This file is a GNU debug extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_FORWARD_LIST -#define _GLIBCXX_PROFILE_FORWARD_LIST 1 - -#if __cplusplus < 201103L -# include <bits/c++0x_warning.h> -#else - -#include <forward_list> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /// Class std::forward_list wrapper with performance instrumentation. - template<typename _Tp, typename _Alloc = std::allocator<_Tp> > - class forward_list - : public _GLIBCXX_STD_C::forward_list<_Tp, _Alloc> - { - typedef _GLIBCXX_STD_C::forward_list<_Tp, _Alloc> _Base; - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::const_iterator const_iterator; - - // 23.2.3.1 construct/copy/destroy: - - forward_list() = default; - - explicit - forward_list(const _Alloc& __al) noexcept - : _Base(__al) { } - - forward_list(const forward_list& __list, const _Alloc& __al) - : _Base(__list, __al) - { } - - forward_list(forward_list&& __list, const _Alloc& __al) - : _Base(std::move(__list), __al) - { } - - explicit - forward_list(size_type __n, const _Alloc& __al = _Alloc()) - : _Base(__n, __al) - { } - - forward_list(size_type __n, const _Tp& __value, - const _Alloc& __al = _Alloc()) - : _Base(__n, __value, __al) - { } - - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> - forward_list(_InputIterator __first, _InputIterator __last, - const _Alloc& __al = _Alloc()) - : _Base(__first, __last, __al) - { } - - forward_list(const forward_list&) = default; - forward_list(forward_list&&) = default; - - forward_list(std::initializer_list<_Tp> __il, - const _Alloc& __al = _Alloc()) - : _Base(__il, __al) - { } - - ~forward_list() = default; - - forward_list& - operator=(const forward_list&) = default; - - forward_list& - operator=(forward_list&&) = default; - - forward_list& - operator=(std::initializer_list<_Tp> __il) - { - _M_base() = __il; - return *this; - } - - void - swap(forward_list& __fl) - noexcept( noexcept(declval<_Base&>().swap(__fl)) ) - { _Base::swap(__fl); } - - void - splice_after(const_iterator __pos, forward_list&& __fl) - { _Base::splice_after(__pos, std::move(__fl)); } - - void - splice_after(const_iterator __pos, forward_list& __list) - { _Base::splice_after(__pos, __list); } - - void - splice_after(const_iterator __pos, forward_list&& __list, - const_iterator __i) - { _Base::splice_after(__pos, std::move(__list), __i); } - - void - splice_after(const_iterator __pos, forward_list& __list, - const_iterator __i) - { _Base::splice_after(__pos, __list, __i); } - - void - splice_after(const_iterator __pos, forward_list&& __list, - const_iterator __before, const_iterator __last) - { _Base::splice_after(__pos, std::move(__list), __before, __last); } - - void - splice_after(const_iterator __pos, forward_list& __list, - const_iterator __before, const_iterator __last) - { _Base::splice_after(__pos, __list, __before, __last); } - - void - merge(forward_list&& __list) - { _Base::merge(std::move(__list)); } - - void - merge(forward_list& __list) - { _Base::merge(__list); } - - template<typename _Comp> - void - merge(forward_list&& __list, _Comp __comp) - { _Base::merge(std::move(__list), __comp); } - - template<typename _Comp> - void - merge(forward_list& __list, _Comp __comp) - { _Base::merge(__list, __comp); } - - _Base& - _M_base() noexcept { return *this; } - - const _Base& - _M_base() const noexcept { return *this; } - }; - - template<typename _Tp, typename _Alloc> - inline bool - operator==(const forward_list<_Tp, _Alloc>& __lx, - const forward_list<_Tp, _Alloc>& __ly) - { return __lx._M_base() == __ly._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator<(const forward_list<_Tp, _Alloc>& __lx, - const forward_list<_Tp, _Alloc>& __ly) - { return __lx._M_base() < __ly._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator!=(const forward_list<_Tp, _Alloc>& __lx, - const forward_list<_Tp, _Alloc>& __ly) - { return !(__lx == __ly); } - - /// Based on operator< - template<typename _Tp, typename _Alloc> - inline bool - operator>(const forward_list<_Tp, _Alloc>& __lx, - const forward_list<_Tp, _Alloc>& __ly) - { return (__ly < __lx); } - - /// Based on operator< - template<typename _Tp, typename _Alloc> - inline bool - operator>=(const forward_list<_Tp, _Alloc>& __lx, - const forward_list<_Tp, _Alloc>& __ly) - { return !(__lx < __ly); } - - /// Based on operator< - template<typename _Tp, typename _Alloc> - inline bool - operator<=(const forward_list<_Tp, _Alloc>& __lx, - const forward_list<_Tp, _Alloc>& __ly) - { return !(__ly < __lx); } - - /// See std::forward_list::swap(). - template<typename _Tp, typename _Alloc> - inline void - swap(forward_list<_Tp, _Alloc>& __lx, - forward_list<_Tp, _Alloc>& __ly) - noexcept(noexcept(__lx.swap(__ly))) - { __lx.swap(__ly); } - -} // namespace __profile -} // namespace std - -#endif // C++11 - -#endif diff --git a/libstdc++-v3/include/profile/impl/profiler.h b/libstdc++-v3/include/profile/impl/profiler.h deleted file mode 100644 index 6d4e0644422..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler.h +++ /dev/null @@ -1,370 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler.h - * @brief Interface of the profiling runtime library. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_H -#define _GLIBCXX_PROFILE_PROFILER_H 1 - -#include <bits/c++config.h> - -// Mechanism to define data with inline linkage. -#define _GLIBCXX_PROFILE_DEFINE_UNINIT_DATA(__type, __name) \ - inline __type& \ - __get_##__name() \ - { \ - static __type __name; \ - return __name; \ - } -#define _GLIBCXX_PROFILE_DEFINE_DATA(__type, __name, __initial_value...) \ - inline __type& __get_##__name() { \ - static __type __name(__initial_value); \ - return __name; \ - } -#define _GLIBCXX_PROFILE_DATA(__name) \ - __get_##__name() - -namespace __gnu_profile -{ - /** @brief Reentrance guard. - * - * Mechanism to protect all __gnu_profile operations against recursion, - * multithreaded and exception reentrance. - */ - struct __reentrance_guard - { - static bool - __get_in() - { - if (__inside() == true) - return false; - else - { - __inside() = true; - return true; - } - } - - static bool& - __inside() - { - static __thread bool _S_inside(false); - return _S_inside; - } - - __reentrance_guard() { } - ~__reentrance_guard() { __inside() = false; } - }; - - // Forward declarations of implementation functions. - // Don't use any __gnu_profile:: in user code. - // Instead, use the __profcxx... macros, which offer guarded access. - class __container_size_info; - class __hashfunc_info; - class __map2umap_info; - class __vector2list_info; - class __list2slist_info; - class __list2vector_info; - - bool __turn_on(); - bool __turn_off(); - bool __is_invalid(); - bool __is_on(); - bool __is_off(); - void __report(); - - __container_size_info* - __trace_hashtable_size_construct(std::size_t); - void __trace_hashtable_size_resize(__container_size_info*, - std::size_t, std::size_t); - void __trace_hashtable_size_destruct(__container_size_info*, - std::size_t, std::size_t); - - __hashfunc_info* - __trace_hash_func_construct(); - void __trace_hash_func_destruct(__hashfunc_info*, - std::size_t, std::size_t, std::size_t); - - __container_size_info* - __trace_vector_size_construct(std::size_t); - void __trace_vector_size_resize(__container_size_info*, - std::size_t, std::size_t); - void __trace_vector_size_destruct(__container_size_info*, - std::size_t, std::size_t); - - __vector2list_info* - __trace_vector_to_list_construct(); - void __trace_vector_to_list_insert(__vector2list_info*, - std::size_t, std::size_t); - void __trace_vector_to_list_iterate(__vector2list_info*, int); - void __trace_vector_to_list_invalid_operator(__vector2list_info*); - void __trace_vector_to_list_resize(__vector2list_info*, - std::size_t, std::size_t); - void __trace_vector_to_list_destruct(__vector2list_info*); - - __list2slist_info* - __trace_list_to_slist_construct(); - void __trace_list_to_slist_rewind(__list2slist_info*); - void __trace_list_to_slist_operation(__list2slist_info*); - void __trace_list_to_slist_destruct(__list2slist_info*); - - __list2vector_info* - __trace_list_to_vector_construct(); - void __trace_list_to_vector_insert(__list2vector_info*, - std::size_t, std::size_t); - void __trace_list_to_vector_iterate(__list2vector_info*, int); - void __trace_list_to_vector_invalid_operator(__list2vector_info*); - void __trace_list_to_vector_resize(__list2vector_info*, - std::size_t, std::size_t); - void __trace_list_to_vector_destruct(__list2vector_info*); - - __map2umap_info* - __trace_map_to_unordered_map_construct(); - void __trace_map_to_unordered_map_invalidate(__map2umap_info*); - void __trace_map_to_unordered_map_insert(__map2umap_info*, std::size_t, - std::size_t); - void __trace_map_to_unordered_map_erase(__map2umap_info*, std::size_t, - std::size_t); - void __trace_map_to_unordered_map_iterate(__map2umap_info*, std::size_t); - void __trace_map_to_unordered_map_find(__map2umap_info*, std::size_t); - void __trace_map_to_unordered_map_destruct(__map2umap_info*); -} // namespace __gnu_profile - -// Master switch turns on all diagnostics that are not explicitly turned off. -#ifdef _GLIBCXX_PROFILE -#ifndef _GLIBCXX_PROFILE_NO_HASHTABLE_TOO_SMALL -#define _GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL -#endif -#ifndef _GLIBCXX_PROFILE_NO_HASHTABLE_TOO_LARGE -#define _GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE -#endif -#ifndef _GLIBCXX_PROFILE_NO_VECTOR_TOO_SMALL -#define _GLIBCXX_PROFILE_VECTOR_TOO_SMALL -#endif -#ifndef _GLIBCXX_PROFILE_NO_VECTOR_TOO_LARGE -#define _GLIBCXX_PROFILE_VECTOR_TOO_LARGE -#endif -#ifndef _GLIBCXX_PROFILE_NO_INEFFICIENT_HASH -#define _GLIBCXX_PROFILE_INEFFICIENT_HASH -#endif -#ifndef _GLIBCXX_PROFILE_NO_VECTOR_TO_LIST -#define _GLIBCXX_PROFILE_VECTOR_TO_LIST -#endif -#ifndef _GLIBCXX_PROFILE_NO_LIST_TO_SLIST -#define _GLIBCXX_PROFILE_LIST_TO_SLIST -#endif -#ifndef _GLIBCXX_PROFILE_NO_LIST_TO_VECTOR -#define _GLIBCXX_PROFILE_LIST_TO_VECTOR -#endif -#ifndef _GLIBCXX_PROFILE_NO_MAP_TO_UNORDERED_MAP -#define _GLIBCXX_PROFILE_MAP_TO_UNORDERED_MAP -#endif -#endif - -// Expose global management routines to user code. -#ifdef _GLIBCXX_PROFILE -#define __profcxx_report() __gnu_profile::__report() -#define __profcxx_turn_on() __gnu_profile::__turn_on() -#define __profcxx_turn_off() __gnu_profile::__turn_off() -#define __profcxx_is_invalid() __gnu_profile::__is_invalid() -#define __profcxx_is_on() __gnu_profile::__is_on() -#define __profcxx_is_off() __gnu_profile::__is_off() -#else -#define __profcxx_report() -#define __profcxx_turn_on() -#define __profcxx_turn_off() -#define __profcxx_is_invalid() -#define __profcxx_is_on() -#define __profcxx_is_off() -#endif - -// Turn on/off instrumentation for HASHTABLE_TOO_SMALL and HASHTABLE_TOO_LARGE. -#if (defined(_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL) \ - || defined(_GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE)) -#define __profcxx_hashtable_size_construct(__x...) \ - __gnu_profile::__trace_hashtable_size_construct(__x) -#define __profcxx_hashtable_size_resize(__x...) \ - __gnu_profile::__trace_hashtable_size_resize(__x) -#define __profcxx_hashtable_size_destruct(__x...) \ - __gnu_profile::__trace_hashtable_size_destruct(__x) -#else -#define __profcxx_hashtable_size_construct(__x...) 0 -#define __profcxx_hashtable_size_resize(__x...) -#define __profcxx_hashtable_size_destruct(__x...) -#endif - -// Turn on/off instrumentation for VECTOR_TOO_SMALL and VECTOR_TOO_LARGE. -#if (defined(_GLIBCXX_PROFILE_VECTOR_TOO_SMALL) \ - || defined(_GLIBCXX_PROFILE_VECTOR_TOO_LARGE)) -#define __profcxx_vector_size_construct(__x...) \ - __gnu_profile::__trace_vector_size_construct(__x) -#define __profcxx_vector_size_resize(__x...) \ - __gnu_profile::__trace_vector_size_resize(__x) -#define __profcxx_vector_size_destruct(__x...) \ - __gnu_profile::__trace_vector_size_destruct(__x) -#else -#define __profcxx_vector_size_construct(__x...) 0 -#define __profcxx_vector_size_resize(__x...) -#define __profcxx_vector_size_destruct(__x...) -#endif - -// Turn on/off instrumentation for INEFFICIENT_HASH. -#if defined(_GLIBCXX_PROFILE_INEFFICIENT_HASH) -#define __profcxx_hash_func_construct(__x...) \ - __gnu_profile::__trace_hash_func_construct(__x) -#define __profcxx_hash_func_destruct(__x...) \ - __gnu_profile::__trace_hash_func_destruct(__x) -#else -#define __profcxx_hash_func_construct(__x...) 0 -#define __profcxx_hash_func_destruct(__x...) -#endif - -// Turn on/off instrumentation for VECTOR_TO_LIST. -#if defined(_GLIBCXX_PROFILE_VECTOR_TO_LIST) -#define __profcxx_vector2list_construct(__x...) \ - __gnu_profile::__trace_vector_to_list_construct(__x) -#define __profcxx_vector2list_insert(__x...) \ - __gnu_profile::__trace_vector_to_list_insert(__x) -#define __profcxx_vector2list_iterate(__x...) \ - __gnu_profile::__trace_vector_to_list_iterate(__x) -#define __profcxx_vector2list_invalid_operator(__x...) \ - __gnu_profile::__trace_vector_to_list_invalid_operator(__x) -#define __profcxx_vector2list_resize(__x...) \ - __gnu_profile::__trace_vector_to_list_resize(__x) -#define __profcxx_vector2list_destruct(__x...) \ - __gnu_profile::__trace_vector_to_list_destruct(__x) -#else -#define __profcxx_vector2list_construct(__x...) 0 -#define __profcxx_vector2list_insert(__x...) -#define __profcxx_vector2list_iterate(__x...) -#define __profcxx_vector2list_invalid_operator(__x...) -#define __profcxx_vector2list_resize(__x...) -#define __profcxx_vector2list_destruct(__x...) -#endif - -// Turn on/off instrumentation for LIST_TO_VECTOR. -#if defined(_GLIBCXX_PROFILE_LIST_TO_VECTOR) -#define __profcxx_list2vector_construct(__x...) \ - __gnu_profile::__trace_list_to_vector_construct(__x) -#define __profcxx_list2vector_insert(__x...) \ - __gnu_profile::__trace_list_to_vector_insert(__x) -#define __profcxx_list2vector_iterate(__x...) \ - __gnu_profile::__trace_list_to_vector_iterate(__x) -#define __profcxx_list2vector_invalid_operator(__x...) \ - __gnu_profile::__trace_list_to_vector_invalid_operator(__x) -#define __profcxx_list2vector_destruct(__x...) \ - __gnu_profile::__trace_list_to_vector_destruct(__x) -#else -#define __profcxx_list2vector_construct(__x...) 0 -#define __profcxx_list2vector_insert(__x...) -#define __profcxx_list2vector_iterate(__x...) -#define __profcxx_list2vector_invalid_operator(__x...) -#define __profcxx_list2vector_destruct(__x...) -#endif - -// Turn on/off instrumentation for LIST_TO_SLIST. -#if defined(_GLIBCXX_PROFILE_LIST_TO_SLIST) -#define __profcxx_list2slist_construct(__x...) \ - __gnu_profile::__trace_list_to_slist_construct(__x) -#define __profcxx_list2slist_rewind(__x...) \ - __gnu_profile::__trace_list_to_slist_rewind(__x) -#define __profcxx_list2slist_operation(__x...) \ - __gnu_profile::__trace_list_to_slist_operation(__x) -#define __profcxx_list2slist_destruct(__x...) \ - __gnu_profile::__trace_list_to_slist_destruct(__x) -#else -#define __profcxx_list2slist_construct(__x...) 0 -#define __profcxx_list2slist_rewind(__x...) -#define __profcxx_list2slist_operation(__x...) -#define __profcxx_list2slist_destruct(__x...) -#endif - -// Turn on/off instrumentation for MAP_TO_UNORDERED_MAP. -#if defined(_GLIBCXX_PROFILE_MAP_TO_UNORDERED_MAP) -#define __profcxx_map2umap_construct(__x...) \ - __gnu_profile::__trace_map_to_unordered_map_construct(__x) -#define __profcxx_map2umap_insert(__x...) \ - __gnu_profile::__trace_map_to_unordered_map_insert(__x) -#define __profcxx_map2umap_erase(__x...) \ - __gnu_profile::__trace_map_to_unordered_map_erase(__x) -#define __profcxx_map2umap_iterate(__x...) \ - __gnu_profile::__trace_map_to_unordered_map_iterate(__x) -#define __profcxx_map2umap_invalidate(__x...) \ - __gnu_profile::__trace_map_to_unordered_map_invalidate(__x) -#define __profcxx_map2umap_find(__x...) \ - __gnu_profile::__trace_map_to_unordered_map_find(__x) -#define __profcxx_map2umap_destruct(__x...) \ - __gnu_profile::__trace_map_to_unordered_map_destruct(__x) -#else -#define __profcxx_map2umap_construct(__x...) 0 -#define __profcxx_map2umap_insert(__x...) -#define __profcxx_map2umap_erase(__x...) -#define __profcxx_map2umap_iterate(__x...) -#define __profcxx_map2umap_invalidate(__x...) -#define __profcxx_map2umap_find(__x...) -#define __profcxx_map2umap_destruct(__x...) -#endif - -// Set default values for compile-time customizable variables. -#ifndef _GLIBCXX_PROFILE_TRACE_PATH_ROOT -#define _GLIBCXX_PROFILE_TRACE_PATH_ROOT "libstdcxx-profile" -#endif -#ifndef _GLIBCXX_PROFILE_TRACE_ENV_VAR -#define _GLIBCXX_PROFILE_TRACE_ENV_VAR "_GLIBCXX_PROFILE_TRACE_PATH_ROOT" -#endif -#ifndef _GLIBCXX_PROFILE_MAX_WARN_COUNT_ENV_VAR -#define _GLIBCXX_PROFILE_MAX_WARN_COUNT_ENV_VAR \ - "_GLIBCXX_PROFILE_MAX_WARN_COUNT" -#endif -#ifndef _GLIBCXX_PROFILE_MAX_WARN_COUNT -#define _GLIBCXX_PROFILE_MAX_WARN_COUNT 10 -#endif -#ifndef _GLIBCXX_PROFILE_MAX_STACK_DEPTH -#define _GLIBCXX_PROFILE_MAX_STACK_DEPTH 32 -#endif -#ifndef _GLIBCXX_PROFILE_MAX_STACK_DEPTH_ENV_VAR -#define _GLIBCXX_PROFILE_MAX_STACK_DEPTH_ENV_VAR \ - "_GLIBCXX_PROFILE_MAX_STACK_DEPTH" -#endif -#ifndef _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC -#define _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC (1 << 28) -#endif -#ifndef _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC_ENV_VAR -#define _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC_ENV_VAR \ - "_GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC" -#endif - -// Instrumentation hook implementations. -#include "profile/impl/profiler_hash_func.h" -#include "profile/impl/profiler_hashtable_size.h" -#include "profile/impl/profiler_map_to_unordered_map.h" -#include "profile/impl/profiler_vector_size.h" -#include "profile/impl/profiler_vector_to_list.h" -#include "profile/impl/profiler_list_to_slist.h" -#include "profile/impl/profiler_list_to_vector.h" - -#endif // _GLIBCXX_PROFILE_PROFILER_H diff --git a/libstdc++-v3/include/profile/impl/profiler_algos.h b/libstdc++-v3/include/profile/impl/profiler_algos.h deleted file mode 100644 index 839d7476197..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_algos.h +++ /dev/null @@ -1,111 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2010-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_algos.h - * @brief Algorithms used by the profile extension. - * - * This file is needed to avoid including \<algorithm\> or \<bits/stl_algo.h\>. - * Including those files would result in recursive includes. - * These implementations are oversimplified. In general, efficiency may be - * sacrificed to minimize maintenance overhead. - */ - -#ifndef _GLIBCXX_PROFILE_PROFILER_ALGOS_H -#define _GLIBCXX_PROFILE_PROFILER_ALGOS_H 1 - -namespace __gnu_profile -{ - /* Helper for __top_n. Insert in sorted vector, but not beyond Nth elem. */ - template<typename _Container> - void - __insert_top_n(_Container& __output, - const typename _Container::value_type& __value, - typename _Container::size_type __n) - { - typename _Container::iterator __it = __output.begin(); - typename _Container::size_type __count = 0; - - // Skip up to N - 1 elements larger than VALUE. - // XXX: Could do binary search for random iterators. - while (true) - { - if (__count >= __n) - // VALUE is not in top N. - return; - - if (__it == __output.end()) - break; - - if (*__it < __value) - break; - - ++__it; - ++__count; - } - - __output.insert(__it, __value); - } - - /* Copy the top N elements in INPUT, sorted in reverse order, to OUTPUT. */ - template<typename _Container> - void - __top_n(const _Container& __input, _Container& __output, - typename _Container::size_type __n) - { - __output.clear(); - typename _Container::const_iterator __it; - for (__it = __input.begin(); __it != __input.end(); ++__it) - __insert_top_n(__output, *__it, __n); - } - - /* Simplified clone of std::for_each. */ - template<typename _InputIterator, typename _Function> - _Function - __for_each(_InputIterator __first, _InputIterator __last, _Function __f) - { - for (; __first != __last; ++__first) - __f(*__first); - return __f; - } - - /* Simplified clone of std::remove. */ - template<typename _ForwardIterator, typename _Tp> - _ForwardIterator - __remove(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __value) - { - if(__first == __last) - return __first; - _ForwardIterator __result = __first; - ++__first; - for(; __first != __last; ++__first) - if(!(*__first == __value)) - { - *__result = *__first; - ++__result; - } - return __result; - } -} // namespace __gnu_profile - -#endif /* _GLIBCXX_PROFILE_PROFILER_ALGOS_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_container_size.h b/libstdc++-v3/include/profile/impl/profiler_container_size.h deleted file mode 100644 index 1fabdc4ee7f..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_container_size.h +++ /dev/null @@ -1,186 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_container_size.h - * @brief Diagnostics for container sizes. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_CONTAINER_SIZE_H -#define _GLIBCXX_PROFILE_PROFILER_CONTAINER_SIZE_H 1 - -#include <sstream> - -#include "profile/impl/profiler.h" -#include "profile/impl/profiler_node.h" -#include "profile/impl/profiler_trace.h" - -namespace __gnu_profile -{ - /** @brief A container size instrumentation line in the object table. */ - class __container_size_info - : public __object_info_base - { - public: - __container_size_info(__stack_t __stack) - : __object_info_base(__stack), _M_init(0), _M_max(0), - _M_min(0), _M_total(0), _M_item_min(0), _M_item_max(0), - _M_item_total(0), _M_count(0), _M_resize(0), _M_cost(0) - { } - - void - __write(FILE* __f) const - { - std::fprintf(__f, "%Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu\n", - _M_init, _M_count, _M_cost, _M_resize, _M_min, _M_max, - _M_total, _M_item_min, _M_item_max, _M_item_total); - } - - float - __magnitude() const - { return static_cast<float>(_M_cost); } - - std::string - __advice() const - { - std::stringstream __message; - if (_M_init < _M_item_max) - __message << "change initial container size from " << _M_init - << " to " << _M_item_max; - return __message.str(); - } - - void - __init(std::size_t __num) - { - _M_init = __num; - _M_max = __num; - } - - void - __merge(const __container_size_info& __o) - { - __object_info_base::__merge(__o); - _M_init = std::max(_M_init, __o._M_init); - _M_max = std::max(_M_max, __o._M_max); - _M_item_max = std::max(_M_item_max, __o._M_item_max); - _M_min = std::min(_M_min, __o._M_min); - _M_item_min = std::min(_M_item_min, __o._M_item_min); - _M_total += __o._M_total; - _M_item_total += __o._M_item_total; - _M_count += __o._M_count; - _M_cost += __o._M_cost; - _M_resize += __o._M_resize; - } - - // Call if a container is destructed or cleaned. - void - __destruct(std::size_t __num, std::size_t __inum) - { - _M_max = std::max(_M_max, __num); - _M_item_max = std::max(_M_item_max, __inum); - if (_M_min == 0) - { - _M_min = __num; - _M_item_min = __inum; - } - else - { - _M_min = std::min(_M_min, __num); - _M_item_min = std::min(_M_item_min, __inum); - } - - _M_total += __num; - _M_item_total += __inum; - _M_count += 1; - } - - // Estimate the cost of resize/rehash. - float - __resize_cost(std::size_t __from, std::size_t) - { return __from; } - - // Call if container is resized. - void - __resize(std::size_t __from, std::size_t __to) - { - _M_cost += this->__resize_cost(__from, __to); - _M_resize += 1; - _M_max = std::max(_M_max, __to); - } - - private: - std::size_t _M_init; - std::size_t _M_max; // range of # buckets - std::size_t _M_min; - std::size_t _M_total; - std::size_t _M_item_min; // range of # items - std::size_t _M_item_max; - std::size_t _M_item_total; - std::size_t _M_count; - std::size_t _M_resize; - std::size_t _M_cost; - }; - - /** @brief A container size instrumentation line in the stack table. */ - class __container_size_stack_info - : public __container_size_info - { - public: - __container_size_stack_info(const __container_size_info& __o) - : __container_size_info(__o) { } - }; - - /** @brief Container size instrumentation trace producer. */ - class __trace_container_size - : public __trace_base<__container_size_info, __container_size_stack_info> - { - public: - ~__trace_container_size() { } - - __trace_container_size() - : __trace_base<__container_size_info, __container_size_stack_info>() { }; - - // Insert a new node at construct with object, callstack and initial size. - __container_size_info* - __insert(__stack_t __stack, std::size_t __num) - { - __container_size_info* __ret = __add_object(__stack); - if (__ret) - __ret->__init(__num); - return __ret; - } - - // Call at destruction/clean to set container final size. - void - __destruct(__container_size_info* __obj_info, - std::size_t __num, std::size_t __inum) - { - __obj_info->__destruct(__num, __inum); - __retire_object(__obj_info); - } - }; - -} // namespace __gnu_profile -#endif /* _GLIBCXX_PROFILE_PROFILER_CONTAINER_SIZE_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_hash_func.h b/libstdc++-v3/include/profile/impl/profiler_hash_func.h deleted file mode 100644 index f60f8cc4695..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_hash_func.h +++ /dev/null @@ -1,153 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_hash_func.h - * @brief Data structures to represent profiling traces. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_HASH_FUNC_H -#define _GLIBCXX_PROFILE_PROFILER_HASH_FUNC_H 1 - -#include "profile/impl/profiler.h" -#include "profile/impl/profiler_node.h" -#include "profile/impl/profiler_trace.h" - -namespace __gnu_profile -{ - /** @brief A hash performance instrumentation line in the object table. */ - class __hashfunc_info - : public __object_info_base - { - public: - __hashfunc_info(__stack_t __stack) - : __object_info_base(__stack), _M_longest_chain(0), - _M_accesses(0), _M_hops(0) { } - - void - __merge(const __hashfunc_info& __o) - { - __object_info_base::__merge(__o); - _M_longest_chain = std::max(_M_longest_chain, __o._M_longest_chain); - _M_accesses += __o._M_accesses; - _M_hops += __o._M_hops; - } - - void - __destruct(std::size_t __chain, std::size_t __accesses, - std::size_t __hops) - { - _M_longest_chain = std::max(_M_longest_chain, __chain); - _M_accesses += __accesses; - _M_hops += __hops; - } - - void - __write(FILE* __f) const - { std::fprintf(__f, "%Zu %Zu %Zu\n", _M_hops, - _M_accesses, _M_longest_chain); } - - float - __magnitude() const - { return static_cast<float>(_M_hops); } - - std::string - __advice() const - { return "change hash function"; } - - private: - std::size_t _M_longest_chain; - std::size_t _M_accesses; - std::size_t _M_hops; - }; - - /** @brief A hash performance instrumentation line in the stack table. */ - class __hashfunc_stack_info - : public __hashfunc_info - { - public: - __hashfunc_stack_info(const __hashfunc_info& __o) - : __hashfunc_info(__o) { } - }; - - /** @brief Hash performance instrumentation producer. */ - class __trace_hash_func - : public __trace_base<__hashfunc_info, __hashfunc_stack_info> - { - public: - __trace_hash_func() - : __trace_base<__hashfunc_info, __hashfunc_stack_info>() - { __id = "hash-distr"; } - - ~__trace_hash_func() {} - - // Call at destruction/clean to set container final size. - void - __destruct(__hashfunc_info* __obj_info, - std::size_t __chain, std::size_t __accesses, std::size_t __hops) - { - if (!__obj_info) - return; - - __obj_info->__destruct(__chain, __accesses, __hops); - __retire_object(__obj_info); - } - }; - - inline void - __trace_hash_func_init() - { _GLIBCXX_PROFILE_DATA(_S_hash_func) = new __trace_hash_func(); } - - inline void - __trace_hash_func_free() - { delete _GLIBCXX_PROFILE_DATA(_S_hash_func); } - - inline void - __trace_hash_func_report(FILE* __f, __warning_vector_t& __warnings) - { __trace_report(_GLIBCXX_PROFILE_DATA(_S_hash_func), __f, __warnings); } - - inline __hashfunc_info* - __trace_hash_func_construct() - { - if (!__profcxx_init()) - return 0; - - if (!__reentrance_guard::__get_in()) - return 0; - - __reentrance_guard __get_out; - return _GLIBCXX_PROFILE_DATA(_S_hash_func)->__add_object(__get_stack()); - } - - inline void - __trace_hash_func_destruct(__hashfunc_info* __obj_info, - std::size_t __chain, std::size_t __accesses, - std::size_t __hops) - { - _GLIBCXX_PROFILE_DATA(_S_hash_func)->__destruct(__obj_info, __chain, - __accesses, __hops); - } - -} // namespace __gnu_profile -#endif /* _GLIBCXX_PROFILE_PROFILER_HASH_FUNC_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h b/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h deleted file mode 100644 index 3ba60ab37fd..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h +++ /dev/null @@ -1,100 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_hashtable_size.h - * @brief Collection of hashtable size traces. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_HASHTABLE_SIZE_H -#define _GLIBCXX_PROFILE_PROFILER_HASHTABLE_SIZE_H 1 - -#include "profile/impl/profiler.h" -#include "profile/impl/profiler_node.h" -#include "profile/impl/profiler_trace.h" -#include "profile/impl/profiler_state.h" -#include "profile/impl/profiler_container_size.h" - -namespace __gnu_profile -{ - /** @brief Hashtable size instrumentation trace producer. */ - class __trace_hashtable_size - : public __trace_container_size - { - public: - __trace_hashtable_size() - : __trace_container_size() - { __id = "hashtable-size"; } - }; - - inline void - __trace_hashtable_size_init() - { _GLIBCXX_PROFILE_DATA(_S_hashtable_size) = new __trace_hashtable_size(); } - - inline void - __trace_hashtable_size_free() - { delete _GLIBCXX_PROFILE_DATA(_S_hashtable_size); } - - inline void - __trace_hashtable_size_report(FILE* __f, __warning_vector_t& __warnings) - { __trace_report(_GLIBCXX_PROFILE_DATA(_S_hashtable_size), __f, __warnings); } - - inline __container_size_info* - __trace_hashtable_size_construct(std::size_t __num) - { - if (!__profcxx_init()) - return 0; - - if (!__reentrance_guard::__get_in()) - return 0; - - __reentrance_guard __get_out; - return _GLIBCXX_PROFILE_DATA(_S_hashtable_size)-> - __insert(__get_stack(), __num); - } - - inline void - __trace_hashtable_size_resize(__container_size_info* __obj_info, - std::size_t __from, std::size_t __to) - { - if (!__obj_info) - return; - - __obj_info->__resize(__from, __to); - } - - inline void - __trace_hashtable_size_destruct(__container_size_info* __obj_info, - std::size_t __num, std::size_t __inum) - { - if (!__obj_info) - return; - - _GLIBCXX_PROFILE_DATA(_S_hashtable_size)-> - __destruct(__obj_info, __num, __inum); - } - -} // namespace __gnu_profile - -#endif /* _GLIBCXX_PROFILE_PROFILER_HASHTABLE_SIZE_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h b/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h deleted file mode 100644 index ae760278a5b..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h +++ /dev/null @@ -1,168 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_list_to_slist.h - * @brief Diagnostics for list to slist. - */ - -// Written by Changhee Jung. - -#ifndef _GLIBCXX_PROFILE_PROFILER_LIST_TO_SLIST_H -#define _GLIBCXX_PROFILE_PROFILER_LIST_TO_SLIST_H 1 - -#include "profile/impl/profiler.h" -#include "profile/impl/profiler_node.h" -#include "profile/impl/profiler_trace.h" - -namespace __gnu_profile -{ - class __list2slist_info - : public __object_info_base - { - public: - __list2slist_info(__stack_t __stack) - : __object_info_base(__stack), _M_rewind(false), _M_operations(0) { } - - // XXX: the magnitude should be multiplied with a constant factor F, - // where F is 1 when the malloc size class of list nodes is different - // from the malloc size class of slist nodes. When they fall into the same - // class, the only slist benefit is from having to set fewer links, so - // the factor F should be much smaller, closer to 0 than to 1. - // This could be implemented by passing the size classes in the config - // file. For now, we always assume F to be 1. - - float - __magnitude() const - { - if (!_M_rewind) - return _M_operations; - else - return 0; - } - - void - __write(FILE* __f) const - { std::fprintf(__f, "%s\n", _M_rewind ? "invalid" : "valid"); } - - std::string - __advice() const - { return "change std::list to std::forward_list"; } - - void - __opr_rewind() - { - _M_rewind = true; - __set_invalid(); - } - - void - __record_operation() - { ++_M_operations; } - - bool - __has_rewind() - { return _M_rewind; } - - private: - bool _M_rewind; - std::size_t _M_operations; - }; - - class __list2slist_stack_info - : public __list2slist_info - { - public: - __list2slist_stack_info(const __list2slist_info& __o) - : __list2slist_info(__o) { } - }; - - class __trace_list_to_slist - : public __trace_base<__list2slist_info, __list2slist_stack_info> - { - public: - ~__trace_list_to_slist() { } - - __trace_list_to_slist() - : __trace_base<__list2slist_info, __list2slist_stack_info>() - { __id = "list-to-slist"; } - - void - __destruct(__list2slist_info* __obj_info) - { __retire_object(__obj_info); } - }; - - - inline void - __trace_list_to_slist_init() - { _GLIBCXX_PROFILE_DATA(_S_list_to_slist) = new __trace_list_to_slist(); } - - inline void - __trace_list_to_slist_free() - { delete _GLIBCXX_PROFILE_DATA(_S_list_to_slist); } - - inline void - __trace_list_to_slist_report(FILE* __f, __warning_vector_t& __warnings) - { __trace_report(_GLIBCXX_PROFILE_DATA(_S_list_to_slist), __f, __warnings); } - - inline __list2slist_info* - __trace_list_to_slist_construct() - { - if (!__profcxx_init()) - return 0; - - if (!__reentrance_guard::__get_in()) - return 0; - - __reentrance_guard __get_out; - return _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__add_object(__get_stack()); - } - - inline void - __trace_list_to_slist_rewind(__list2slist_info* __obj_info) - { - if (!__obj_info) - return; - - __obj_info->__opr_rewind(); - } - - inline void - __trace_list_to_slist_operation(__list2slist_info* __obj_info) - { - if (!__obj_info) - return; - - __obj_info->__record_operation(); - } - - inline void - __trace_list_to_slist_destruct(__list2slist_info* __obj_info) - { - if (!__obj_info) - return; - - _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__destruct(__obj_info); - } - -} // namespace __gnu_profile -#endif /* _GLIBCXX_PROFILE_PROFILER_LIST_TO_SLIST_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h b/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h deleted file mode 100644 index c755c4c9735..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h +++ /dev/null @@ -1,261 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_list_to_vector.h - * @brief diagnostics for list to vector. - */ - -// Written by Changhee Jung. - -#ifndef _GLIBCXX_PROFILE_PROFILER_LIST_TO_VECTOR_H -#define _GLIBCXX_PROFILE_PROFILER_LIST_TO_VECTOR_H 1 - -#include <sstream> - -#include "profile/impl/profiler.h" -#include "profile/impl/profiler_node.h" -#include "profile/impl/profiler_trace.h" - -namespace __gnu_profile -{ - /** @brief A list-to-vector instrumentation line in the object table. */ - class __list2vector_info - : public __object_info_base - { - public: - __list2vector_info(__stack_t __stack) - : __object_info_base(__stack), _M_shift_count(0), _M_iterate(0), - _M_resize(0), _M_list_cost(0), _M_vector_cost(0), - _M_max_size(0) { } - - void - __merge(const __list2vector_info& __o) - { - __object_info_base::__merge(__o); - _M_shift_count += __o._M_shift_count; - _M_iterate += __o._M_iterate; - _M_vector_cost += __o._M_vector_cost; - _M_list_cost += __o._M_list_cost; - _M_resize += __o._M_resize; - _M_max_size = std::max( _M_max_size, __o._M_max_size); - } - - void - __write(FILE* __f) const - { - std::fprintf(__f, "%Zu %Zu %Zu %.0f %.0f\n", _M_shift_count, - _M_resize, _M_iterate, _M_vector_cost, _M_list_cost); - } - - float - __magnitude() const - { return _M_list_cost - _M_vector_cost; } - - std::string - __advice() const - { - std::stringstream __sstream; - __sstream - << "change std::list to std::vector and its initial size from 0 to " - << _M_max_size; - return __sstream.str(); - } - - std::size_t - __shift_count() - { return _M_shift_count; } - - std::size_t - __iterate() - { return _M_iterate; } - - float - __list_cost() - { return _M_list_cost; } - - std::size_t - __resize() - { return _M_resize; } - - void - __set_list_cost(float __lc) - { _M_list_cost = __lc; } - - void - __set_vector_cost(float __vc) - { _M_vector_cost = __vc; } - - void - __opr_insert(std::size_t __shift, std::size_t __size) - { - _M_shift_count += __shift; - _M_max_size = std::max(_M_max_size, __size); - } - - void - __opr_iterate(int __num) - { __gnu_cxx::__atomic_add(&_M_iterate, __num); } - - void - __resize(std::size_t __from, std::size_t) - { _M_resize += __from; } - - private: - std::size_t _M_shift_count; - mutable _Atomic_word _M_iterate; - std::size_t _M_resize; - float _M_list_cost; - float _M_vector_cost; - std::size_t _M_max_size; - }; - - class __list2vector_stack_info - : public __list2vector_info - { - public: - __list2vector_stack_info(const __list2vector_info& __o) - : __list2vector_info(__o) {} - }; - - class __trace_list_to_vector - : public __trace_base<__list2vector_info, __list2vector_stack_info> - { - public: - __trace_list_to_vector() - : __trace_base<__list2vector_info, __list2vector_stack_info>() - { __id = "list-to-vector"; } - - ~__trace_list_to_vector() { } - - // Call at destruction/clean to set container final size. - void - __destruct(__list2vector_info* __obj_info) - { - float __vc = __vector_cost(__obj_info->__shift_count(), - __obj_info->__iterate()); - float __lc = __list_cost(__obj_info->__shift_count(), - __obj_info->__iterate()); - __obj_info->__set_vector_cost(__vc); - __obj_info->__set_list_cost(__lc); - __retire_object(__obj_info); - } - - // Collect cost of operations. - float - __vector_cost(std::size_t __shift, std::size_t __iterate) - { - // The resulting vector will use a 'reserve' method. - return (__shift - * _GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor).__value - + __iterate - * _GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor).__value); - } - - float - __list_cost(std::size_t __shift, std::size_t __iterate) - { - return (__shift - * _GLIBCXX_PROFILE_DATA(__list_shift_cost_factor).__value - + __iterate - * _GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor).__value); - } - }; - - - inline void - __trace_list_to_vector_init() - { _GLIBCXX_PROFILE_DATA(_S_list_to_vector) = new __trace_list_to_vector(); } - - inline void - __trace_list_to_vector_free() - { delete _GLIBCXX_PROFILE_DATA(_S_list_to_vector); } - - inline void - __trace_list_to_vector_report(FILE* __f, __warning_vector_t& __warnings) - { __trace_report(_GLIBCXX_PROFILE_DATA(_S_list_to_vector), __f, __warnings); } - - inline __list2vector_info* - __trace_list_to_vector_construct() - { - if (!__profcxx_init()) - return 0; - - if (!__reentrance_guard::__get_in()) - return 0; - - __reentrance_guard __get_out; - return _GLIBCXX_PROFILE_DATA(_S_list_to_vector) - ->__add_object(__get_stack()); - } - - inline void - __trace_list_to_vector_insert(__list2vector_info* __obj_info, - std::size_t __shift, std::size_t __size) - { - if (!__obj_info) - return; - - __obj_info->__opr_insert(__shift, __size); - } - - inline void - __trace_list_to_vector_iterate(__list2vector_info* __obj_info, - int) - { - if (!__obj_info) - return; - - // We only collect if an iteration took place no matter in what side. - __obj_info->__opr_iterate(1); - } - - inline void - __trace_list_to_vector_invalid_operator(__list2vector_info* __obj_info) - { - if (!__obj_info) - return; - - __obj_info->__set_invalid(); - } - - inline void - __trace_list_to_vector_resize(__list2vector_info* __obj_info, - std::size_t __from, std::size_t __to) - { - if (!__obj_info) - return; - - __obj_info->__resize(__from, __to); - } - - inline void - __trace_list_to_vector_destruct(__list2vector_info* __obj_info) - { - if (!__obj_info) - return; - - _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__destruct(__obj_info); - } - -} // namespace __gnu_profile -#endif /* _GLIBCXX_PROFILE_PROFILER_LIST_TO_VECTOR_H__ */ diff --git a/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h b/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h deleted file mode 100644 index a81b1bd3be6..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h +++ /dev/null @@ -1,275 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_map_to_unordered_map.h - * @brief Diagnostics for map to unordered_map. - */ - -// Written by Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_MAP_TO_UNORDERED_MAP_H -#define _GLIBCXX_PROFILE_PROFILER_MAP_TO_UNORDERED_MAP_H 1 - -#include "profile/impl/profiler.h" -#include "profile/impl/profiler_node.h" -#include "profile/impl/profiler_trace.h" - -namespace __gnu_profile -{ - inline int - __log2(std::size_t __size) - { - for (int __bit_count = sizeof(std::size_t) - 1; __bit_count >= 0; - -- __bit_count) - if ((2 << __bit_count) & __size) - return __bit_count; - return 0; - } - - inline float - __map_insert_cost(std::size_t __size) - { return (_GLIBCXX_PROFILE_DATA(__map_insert_cost_factor).__value - * static_cast<float>(__log2(__size))); } - - inline float - __map_erase_cost(std::size_t __size) - { return (_GLIBCXX_PROFILE_DATA(__map_erase_cost_factor).__value - * static_cast<float>(__log2(__size))); } - - inline float - __map_find_cost(std::size_t __size) - { return (_GLIBCXX_PROFILE_DATA(__map_find_cost_factor).__value - * static_cast<float>(__log2(__size))); } - - /** @brief A map-to-unordered_map instrumentation line in the - object table. */ - class __map2umap_info - : public __object_info_base - { - public: - __map2umap_info(__stack_t __stack) - : __object_info_base(__stack), _M_insert(0), _M_erase(0), _M_find(0), - _M_iterate(0), _M_umap_cost(0.0), _M_map_cost(0.0) - { } - - void - __merge(const __map2umap_info& __o) - { - __object_info_base::__merge(__o); - _M_insert += __o._M_insert; - _M_erase += __o._M_erase; - _M_find += __o._M_find; - _M_iterate += __o._M_iterate; - _M_umap_cost += __o._M_umap_cost; - _M_map_cost += __o._M_map_cost; - } - - void - __write(FILE* __f) const - { - std::fprintf(__f, "%Zu %Zu %Zu %Zu %.0f %.0f\n", - _M_insert, _M_erase, _M_find, _M_iterate, _M_map_cost, - _M_umap_cost); - } - - float - __magnitude() const - { return _M_map_cost - _M_umap_cost; } - - std::string - __advice() const - { return "prefer an unordered container"; } - - void - __record_insert(std::size_t __size, std::size_t __count) - { - ++_M_insert; - if (__count) - { - _M_map_cost += __count * __map_insert_cost(__size); - _M_umap_cost - += (__count - * _GLIBCXX_PROFILE_DATA(__umap_insert_cost_factor).__value); - } - } - - void - __record_erase(std::size_t __size, std::size_t __count) - { - ++_M_erase; - if (__count) - { - _M_map_cost += __count * __map_erase_cost(__size); - _M_umap_cost - += (__count - * _GLIBCXX_PROFILE_DATA(__umap_erase_cost_factor).__value); - } - } - - void - __record_find(std::size_t __size) - { - ++_M_find; - _M_map_cost += __map_find_cost(__size); - _M_umap_cost += _GLIBCXX_PROFILE_DATA(__umap_find_cost_factor).__value; - } - - void - __record_iterate(int __count) - { __gnu_cxx::__atomic_add(&_M_iterate, __count); } - - void - __set_iterate_costs() - { - _M_umap_cost - += (_M_iterate - * _GLIBCXX_PROFILE_DATA(__umap_iterate_cost_factor).__value); - _M_map_cost - += (_M_iterate - * _GLIBCXX_PROFILE_DATA(__map_iterate_cost_factor).__value); - } - - private: - std::size_t _M_insert; - std::size_t _M_erase; - std::size_t _M_find; - mutable _Atomic_word _M_iterate; - float _M_umap_cost; - float _M_map_cost; - }; - - - /** @brief A map-to-unordered_map instrumentation line in the - stack table. */ - class __map2umap_stack_info - : public __map2umap_info - { - public: - __map2umap_stack_info(const __map2umap_info& __o) - : __map2umap_info(__o) { } - }; - - /** @brief Map-to-unordered_map instrumentation producer. */ - class __trace_map2umap - : public __trace_base<__map2umap_info, __map2umap_stack_info> - { - public: - __trace_map2umap() - : __trace_base<__map2umap_info, __map2umap_stack_info>() - { __id = "ordered-to-unordered"; } - - // Call at destruction/clean to set container final size. - void - __destruct(__map2umap_info* __obj_info) - { - __obj_info->__set_iterate_costs(); - __retire_object(__obj_info); - } - }; - - inline void - __trace_map_to_unordered_map_init() - { _GLIBCXX_PROFILE_DATA(_S_map2umap) = new __trace_map2umap(); } - - inline void - __trace_map_to_unordered_map_free() - { delete _GLIBCXX_PROFILE_DATA(_S_map2umap); } - - inline void - __trace_map_to_unordered_map_report(FILE* __f, - __warning_vector_t& __warnings) - { __trace_report(_GLIBCXX_PROFILE_DATA(_S_map2umap), __f, __warnings); } - - inline __map2umap_info* - __trace_map_to_unordered_map_construct() - { - if (!__profcxx_init()) - return 0; - - if (!__reentrance_guard::__get_in()) - return 0; - - __reentrance_guard __get_out; - return _GLIBCXX_PROFILE_DATA(_S_map2umap)->__add_object(__get_stack()); - } - - inline void - __trace_map_to_unordered_map_insert(__map2umap_info* __info, - std::size_t __size, std::size_t __count) - { - if (!__info) - return; - - __info->__record_insert(__size, __count); - } - - inline void - __trace_map_to_unordered_map_erase(__map2umap_info* __info, - std::size_t __size, std::size_t __count) - { - if (!__info) - return; - - __info->__record_erase(__size, __count); - } - - inline void - __trace_map_to_unordered_map_find(__map2umap_info* __info, - std::size_t __size) - { - if (!__info) - return; - - __info->__record_find(__size); - } - - inline void - __trace_map_to_unordered_map_iterate(__map2umap_info* __info, - int) - { - if (!__info) - return; - - // We only collect if an iteration took place no matter in what side. - __info->__record_iterate(1); - } - - inline void - __trace_map_to_unordered_map_invalidate(__map2umap_info* __info) - { - if (!__info) - return; - - __info->__set_invalid(); - } - - inline void - __trace_map_to_unordered_map_destruct(__map2umap_info* __info) - { - if (!__info) - return; - - _GLIBCXX_PROFILE_DATA(_S_map2umap)->__destruct(__info); - } -} // namespace __gnu_profile -#endif /* _GLIBCXX_PROFILE_PROFILER_MAP_TO_UNORDERED_MAP_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_node.h b/libstdc++-v3/include/profile/impl/profiler_node.h deleted file mode 100644 index af523c0e5a7..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_node.h +++ /dev/null @@ -1,155 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_node.h - * @brief Data structures to represent a single profiling event. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_NODE_H -#define _GLIBCXX_PROFILE_PROFILER_NODE_H 1 - -#include <cstdio> // FILE, fprintf - -#include <vector> -#if defined _GLIBCXX_HAVE_EXECINFO_H -#include <execinfo.h> -#endif - -namespace __gnu_profile -{ - typedef void* __instruction_address_t; - typedef std::_GLIBCXX_STD_C::vector<__instruction_address_t> __stack_npt; - typedef __stack_npt* __stack_t; - - std::size_t __stack_max_depth(); - - inline __stack_t - __get_stack() - { -#if defined _GLIBCXX_HAVE_EXECINFO_H - __try - { - std::size_t __max_depth = __stack_max_depth(); - if (__max_depth == 0) - return 0; - __stack_npt __buffer(__max_depth); - int __depth = backtrace(&__buffer[0], __max_depth); - return new(std::nothrow) __stack_npt(__buffer.begin(), - __buffer.begin() + __depth); - } - __catch(...) - { - return 0; - } -#else - return 0; -#endif - } - - inline std::size_t - __size(__stack_t __stack) - { - if (!__stack) - return 0; - else - return __stack->size(); - } - - // XXX - inline void - __write(FILE* __f, __stack_t __stack) - { - if (!__stack) - return; - - __stack_npt::const_iterator __it; - for (__it = __stack->begin(); __it != __stack->end(); ++__it) - std::fprintf(__f, "%p ", *__it); - } - - /** @brief Hash function for summary trace using call stack as index. */ - class __stack_hash - { - public: - std::size_t - operator()(__stack_t __s) const - { - if (!__s) - return 0; - - std::size_t __index = 0; - __stack_npt::const_iterator __it; - for (__it = __s->begin(); __it != __s->end(); ++__it) - __index += reinterpret_cast<std::size_t>(*__it); - return __index; - } - - bool operator() (__stack_t __stack1, __stack_t __stack2) const - { - if (!__stack1 && !__stack2) - return true; - if (!__stack1 || !__stack2) - return false; - if (__stack1->size() != __stack2->size()) - return false; - - std::size_t __byte_size - = __stack1->size() * sizeof(__stack_npt::value_type); - return __builtin_memcmp(&(*__stack1)[0], &(*__stack2)[0], - __byte_size) == 0; - } - }; - - - /** @brief Base class for a line in the object table. */ - class __object_info_base - { - public: - __object_info_base(__stack_t __stack) - : _M_stack(__stack), _M_valid(true) { } - - bool - __is_valid() const - { return _M_valid; } - - void - __set_invalid() - { _M_valid = false; } - - void - __merge(const __object_info_base& __o) - { _M_valid &= __o._M_valid; } - - __stack_t - __stack() const - { return _M_stack; } - - protected: - __stack_t _M_stack; - bool _M_valid; - }; - -} // namespace __gnu_profile -#endif /* _GLIBCXX_PROFILE_PROFILER_NODE_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_state.h b/libstdc++-v3/include/profile/impl/profiler_state.h deleted file mode 100644 index ddeaad6037a..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_state.h +++ /dev/null @@ -1,69 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_state.h - * @brief Global profiler state. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_STATE_H -#define _GLIBCXX_PROFILE_PROFILER_STATE_H 1 - -namespace __gnu_profile -{ - enum __state_type { __ON, __OFF, __INVALID }; - - _GLIBCXX_PROFILE_DEFINE_DATA(__state_type, __state, __INVALID); - - inline bool - __turn(__state_type __s) - { - __state_type inv(__INVALID); - return __atomic_compare_exchange_n(&_GLIBCXX_PROFILE_DATA(__state), - &inv, __s, false, __ATOMIC_ACQ_REL, - __ATOMIC_RELAXED); - } - - inline bool - __turn_on() - { return __turn(__ON); } - - inline bool - __turn_off() - { return __turn(__OFF); } - - inline bool - __is_on() - { return _GLIBCXX_PROFILE_DATA(__state) == __ON; } - - inline bool - __is_off() - { return _GLIBCXX_PROFILE_DATA(__state) == __OFF; } - - inline bool - __is_invalid() - { return _GLIBCXX_PROFILE_DATA(__state) == __INVALID; } - -} // end namespace __gnu_profile -#endif /* _GLIBCXX_PROFILE_PROFILER_STATE_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_trace.h b/libstdc++-v3/include/profile/impl/profiler_trace.h deleted file mode 100644 index 261f3b3cc72..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_trace.h +++ /dev/null @@ -1,663 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_trace.h - * @brief Data structures to represent profiling traces. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_TRACE_H -#define _GLIBCXX_PROFILE_PROFILER_TRACE_H 1 - -#include <cstdio> // fopen, fclose, fprintf, FILE -#include <cerrno> -#include <cstdlib> // atof, atoi, strtol, getenv, atexit, abort - -#if __cplusplus >= 201103L -#include <unordered_map> -#define _GLIBCXX_IMPL_UNORDERED_MAP std::_GLIBCXX_STD_C::unordered_map -#else -#include <tr1/unordered_map> -#define _GLIBCXX_IMPL_UNORDERED_MAP std::tr1::unordered_map -#endif - -#include <ext/concurrence.h> -#include <fstream> -#include <string> -#include <utility> -#include <vector> - -#include "profile/impl/profiler_algos.h" -#include "profile/impl/profiler_state.h" -#include "profile/impl/profiler_node.h" - -namespace __gnu_profile -{ - /** @brief Internal environment. Values can be set one of two ways: - 1. In config file "var = value". The default config file path is - libstdcxx-profile.conf. - 2. By setting process environment variables. For instance, in a Bash - shell you can set the unit cost of iterating through a map like this: - export __map_iterate_cost_factor=5.0. - If a value is set both in the input file and through an environment - variable, the environment value takes precedence. */ - typedef _GLIBCXX_IMPL_UNORDERED_MAP<std::string, std::string> __env_t; - - _GLIBCXX_PROFILE_DEFINE_UNINIT_DATA(__env_t, __env); - - /** @brief Master lock. */ - _GLIBCXX_PROFILE_DEFINE_UNINIT_DATA(__gnu_cxx::__mutex, __global_mutex); - - /** @brief Representation of a warning. */ - struct __warning_data - { - float __magnitude; - __stack_t __context; - const char* __warning_id; - std::string __warning_message; - - __warning_data() - : __magnitude(0.0), __context(0), __warning_id(0) { } - - __warning_data(float __m, __stack_t __c, const char* __id, - const std::string& __msg) - : __magnitude(__m), __context(__c), __warning_id(__id), - __warning_message(__msg) { } - - bool - operator<(const __warning_data& __other) const - { return __magnitude < __other.__magnitude; } - }; - - typedef std::_GLIBCXX_STD_C::vector<__warning_data> __warning_vector_t; - - // Defined in profiler_<diagnostic name>.h. - class __trace_hash_func; - class __trace_hashtable_size; - class __trace_map2umap; - class __trace_vector_size; - class __trace_vector_to_list; - class __trace_list_to_slist; - class __trace_list_to_vector; - void __trace_vector_size_init(); - void __trace_hashtable_size_init(); - void __trace_hash_func_init(); - void __trace_vector_to_list_init(); - void __trace_list_to_slist_init(); - void __trace_list_to_vector_init(); - void __trace_map_to_unordered_map_init(); - void __trace_vector_size_report(FILE*, __warning_vector_t&); - void __trace_hashtable_size_report(FILE*, __warning_vector_t&); - void __trace_hash_func_report(FILE*, __warning_vector_t&); - void __trace_vector_to_list_report(FILE*, __warning_vector_t&); - void __trace_list_to_slist_report(FILE*, __warning_vector_t&); - void __trace_list_to_vector_report(FILE*, __warning_vector_t&); - void __trace_map_to_unordered_map_report(FILE*, __warning_vector_t&); - void __trace_vector_size_free(); - void __trace_hashtable_size_free(); - void __trace_hash_func_free(); - void __trace_vector_to_list_free(); - void __trace_list_to_slist_free(); - void __trace_list_to_vector_free(); - void __trace_map_to_unordered_map_free(); - - struct __cost_factor - { - const char* __env_var; - float __value; - }; - - typedef std::_GLIBCXX_STD_C::vector<__cost_factor*> __cost_factor_vector; - - _GLIBCXX_PROFILE_DEFINE_DATA(__trace_hash_func*, _S_hash_func, 0); - _GLIBCXX_PROFILE_DEFINE_DATA(__trace_hashtable_size*, _S_hashtable_size, 0); - _GLIBCXX_PROFILE_DEFINE_DATA(__trace_map2umap*, _S_map2umap, 0); - _GLIBCXX_PROFILE_DEFINE_DATA(__trace_vector_size*, _S_vector_size, 0); - _GLIBCXX_PROFILE_DEFINE_DATA(__trace_vector_to_list*, _S_vector_to_list, 0); - _GLIBCXX_PROFILE_DEFINE_DATA(__trace_list_to_slist*, _S_list_to_slist, 0); - _GLIBCXX_PROFILE_DEFINE_DATA(__trace_list_to_vector*, _S_list_to_vector, 0); - - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_shift_cost_factor, - {"__vector_shift_cost_factor", 1.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_iterate_cost_factor, - {"__vector_iterate_cost_factor", 1.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_resize_cost_factor, - {"__vector_resize_cost_factor", 1.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_shift_cost_factor, - {"__list_shift_cost_factor", 0.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_iterate_cost_factor, - {"__list_iterate_cost_factor", 10.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_resize_cost_factor, - {"__list_resize_cost_factor", 0.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_insert_cost_factor, - {"__map_insert_cost_factor", 1.5}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_erase_cost_factor, - {"__map_erase_cost_factor", 1.5}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_find_cost_factor, - {"__map_find_cost_factor", 1}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_iterate_cost_factor, - {"__map_iterate_cost_factor", 2.3}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_insert_cost_factor, - {"__umap_insert_cost_factor", 12.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_erase_cost_factor, - {"__umap_erase_cost_factor", 12.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_find_cost_factor, - {"__umap_find_cost_factor", 10.0}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_iterate_cost_factor, - {"__umap_iterate_cost_factor", 1.7}); - _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor_vector*, __cost_factors, 0); - - _GLIBCXX_PROFILE_DEFINE_DATA(const char*, _S_trace_file_name, - _GLIBCXX_PROFILE_TRACE_PATH_ROOT); - _GLIBCXX_PROFILE_DEFINE_DATA(std::size_t, _S_max_warn_count, - _GLIBCXX_PROFILE_MAX_WARN_COUNT); - _GLIBCXX_PROFILE_DEFINE_DATA(std::size_t, _S_max_stack_depth, - _GLIBCXX_PROFILE_MAX_STACK_DEPTH); - _GLIBCXX_PROFILE_DEFINE_DATA(std::size_t, _S_max_mem, - _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC); - - inline std::size_t - __stack_max_depth() - { return _GLIBCXX_PROFILE_DATA(_S_max_stack_depth); } - - inline std::size_t - __max_mem() - { return _GLIBCXX_PROFILE_DATA(_S_max_mem); } - - /** @brief Base class for all trace producers. */ - template<typename __object_info, typename __stack_info> - class __trace_base - { - public: - // Do not pick the initial size too large, as we don't know which - // diagnostics are more active. - __trace_base() - : __objects_byte_size(0), __stack_table(10000), - __stack_table_byte_size(0), __id(0) { } - - ~__trace_base() - { - for (typename __stack_table_t::iterator __it - = __stack_table.begin(); __it != __stack_table.end(); ++__it) - delete __it->first; - } - - __object_info* __add_object(__stack_t __stack); - void __retire_object(__object_info* __info); - void __write(FILE* __f); - void __collect_warnings(__warning_vector_t& __warnings); - void __free(); - - private: - __gnu_cxx::__mutex __trace_mutex; - typedef _GLIBCXX_IMPL_UNORDERED_MAP<__stack_t, __stack_info, - __stack_hash, - __stack_hash> __stack_table_t; - std::size_t __objects_byte_size; - __stack_table_t __stack_table; - std::size_t __stack_table_byte_size; - - protected: - const char* __id; - }; - - template<typename __object_info, typename __stack_info> - __object_info* - __trace_base<__object_info, __stack_info>:: - __add_object(__stack_t __stack) - { - // If we have no backtrace information no need to collect data. - if (!__stack) - return 0; - - __gnu_cxx::__scoped_lock __lock(this->__trace_mutex); - - if (__max_mem() != 0 && __objects_byte_size >= __max_mem()) - { - delete __stack; - return 0; - } - - __object_info* __ret = new(std::nothrow) __object_info(__stack); - if (!__ret) - { - delete __stack; - return 0; - } - - __objects_byte_size += sizeof(__object_info); - return __ret; - } - - template<typename __object_info, typename __stack_info> - void - __trace_base<__object_info, __stack_info>:: - __retire_object(__object_info* __obj_info) - { - if (!__obj_info) - return; - - __gnu_cxx::__scoped_lock __lock(this->__trace_mutex); - - const __object_info& __info = *__obj_info; - __stack_t __stack = __info.__stack(); - typename __stack_table_t::iterator __stack_it - = __stack_table.find(__stack); - - if (__stack_it == __stack_table.end()) - { - // First occurrence of this call context. - if (__max_mem() == 0 || __stack_table_byte_size < __max_mem()) - { - __stack_table_byte_size - += (sizeof(__instruction_address_t) * __size(__stack) - + sizeof(__stack) + sizeof(__stack_info)); - __stack_table.insert(make_pair(__stack, - __stack_info(__info))); - } - else - delete __stack; - } - else - { - // Merge object info into info summary for this call context. - __stack_it->second.__merge(__info); - delete __stack; - } - - delete __obj_info; - __objects_byte_size -= sizeof(__object_info); - } - - template<typename __object_info, typename __stack_info> - void - __trace_base<__object_info, __stack_info>:: - __write(FILE* __f) - { - for (typename __stack_table_t::iterator __it - = __stack_table.begin(); __it != __stack_table.end(); ++__it) - if (__it->second.__is_valid()) - { - std::fprintf(__f, __id); - std::fprintf(__f, "|"); - __gnu_profile::__write(__f, __it->first); - std::fprintf(__f, "|"); - __it->second.__write(__f); - } - } - - template<typename __object_info, typename __stack_info> - void - __trace_base<__object_info, __stack_info>:: - __collect_warnings(__warning_vector_t& __warnings) - { - for (typename __stack_table_t::iterator __it - = __stack_table.begin(); __it != __stack_table.end(); ++__it) - __warnings.push_back(__warning_data(__it->second.__magnitude(), - __it->first, __id, - __it->second.__advice())); - } - - template<typename __object_info, typename __stack_info> - inline void - __trace_report(__trace_base<__object_info, __stack_info>* __cont, - FILE* __f, __warning_vector_t& __warnings) - { - if (__cont) - { - __cont->__collect_warnings(__warnings); - __cont->__write(__f); - } - } - - inline std::size_t - __env_to_size_t(const char* __env_var, std::size_t __default_value) - { - char* __env_value = std::getenv(__env_var); - if (__env_value) - { - errno = 0; - long __converted_value = std::strtol(__env_value, 0, 10); - if (errno || __converted_value < 0) - { - std::fprintf(stderr, - "Bad value for environment variable '%s'.\n", - __env_var); - std::abort(); - } - else - return static_cast<std::size_t>(__converted_value); - } - else - return __default_value; - } - - inline void - __set_max_stack_trace_depth() - { - _GLIBCXX_PROFILE_DATA(_S_max_stack_depth) - = __env_to_size_t(_GLIBCXX_PROFILE_MAX_STACK_DEPTH_ENV_VAR, - _GLIBCXX_PROFILE_DATA(_S_max_stack_depth)); - } - - inline void - __set_max_mem() - { - _GLIBCXX_PROFILE_DATA(_S_max_mem) - = __env_to_size_t(_GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC_ENV_VAR, - _GLIBCXX_PROFILE_DATA(_S_max_mem)); - } - - inline int - __log_magnitude(float __f) - { - const float __log_base = 10.0; - int __result = 0; - int __sign = 1; - - if (__f < 0) - { - __f = -__f; - __sign = -1; - } - - while (__f > __log_base) - { - ++__result; - __f /= 10.0; - } - return __sign * __result; - } - - inline FILE* - __open_output_file(const char* __extension) - { - // The path is made of _S_trace_file_name + "." + extension. - std::size_t __root_len - = __builtin_strlen(_GLIBCXX_PROFILE_DATA(_S_trace_file_name)); - std::size_t __ext_len = __builtin_strlen(__extension); - char* __file_name = new char[__root_len + 1 + __ext_len + 1]; - __builtin_memcpy(__file_name, - _GLIBCXX_PROFILE_DATA(_S_trace_file_name), - __root_len); - *(__file_name + __root_len) = '.'; - __builtin_memcpy(__file_name + __root_len + 1, - __extension, __ext_len + 1); - - FILE* __out_file = std::fopen(__file_name, "w"); - if (!__out_file) - { - std::fprintf(stderr, "Could not open trace file '%s'.\n", - __file_name); - std::abort(); - } - - delete[] __file_name; - return __out_file; - } - - struct __warn - { - FILE* __file; - - __warn(FILE* __f) - { __file = __f; } - - void - operator()(const __warning_data& __info) - { - std::fprintf(__file, __info.__warning_id); - std::fprintf(__file, ": improvement = %d", - __log_magnitude(__info.__magnitude)); - std::fprintf(__file, ": call stack = "); - __gnu_profile::__write(__file, __info.__context); - std::fprintf(__file, ": advice = %s\n", - __info.__warning_message.c_str()); - } - }; - - /** @brief Final report method, registered with @b atexit. - * - * This can also be called directly by user code, including signal handlers. - * It is protected against deadlocks by the reentrance guard in profiler.h. - * However, when called from a signal handler that triggers while within - * __gnu_profile (under the guarded zone), no output will be produced. - */ - inline void - __report() - { - __gnu_cxx::__scoped_lock __lock(_GLIBCXX_PROFILE_DATA(__global_mutex)); - - __warning_vector_t __warnings, __top_warnings; - - FILE* __raw_file = __open_output_file("raw"); - __trace_vector_size_report(__raw_file, __warnings); - __trace_hashtable_size_report(__raw_file, __warnings); - __trace_hash_func_report(__raw_file, __warnings); - __trace_vector_to_list_report(__raw_file, __warnings); - __trace_list_to_slist_report(__raw_file, __warnings); - __trace_list_to_vector_report(__raw_file, __warnings); - __trace_map_to_unordered_map_report(__raw_file, __warnings); - std::fclose(__raw_file); - - // Sort data by magnitude, keeping just top N. - std::size_t __cutoff = std::min(_GLIBCXX_PROFILE_DATA(_S_max_warn_count), - __warnings.size()); - __top_n(__warnings, __top_warnings, __cutoff); - - FILE* __warn_file = __open_output_file("txt"); - __for_each(__top_warnings.begin(), __top_warnings.end(), - __warn(__warn_file)); - std::fclose(__warn_file); - } - - inline void - __report_and_free() - { - __report(); - - __trace_map_to_unordered_map_free(); - __trace_list_to_vector_free(); - __trace_list_to_slist_free(); - __trace_vector_to_list_free(); - __trace_hash_func_free(); - __trace_hashtable_size_free(); - __trace_vector_size_free(); - delete _GLIBCXX_PROFILE_DATA(__cost_factors); - } - - inline void - __set_trace_path() - { - char* __env_trace_file_name = std::getenv(_GLIBCXX_PROFILE_TRACE_ENV_VAR); - - if (__env_trace_file_name) - _GLIBCXX_PROFILE_DATA(_S_trace_file_name) = __env_trace_file_name; - - // Make sure early that we can create the trace file. - std::fclose(__open_output_file("txt")); - } - - inline void - __set_max_warn_count() - { - char* __env_max_warn_count_str - = std::getenv(_GLIBCXX_PROFILE_MAX_WARN_COUNT_ENV_VAR); - - if (__env_max_warn_count_str) - _GLIBCXX_PROFILE_DATA(_S_max_warn_count) - = static_cast<std::size_t>(std::atoi(__env_max_warn_count_str)); - } - - inline void - __read_cost_factors() - { - std::string __conf_file_name(_GLIBCXX_PROFILE_DATA(_S_trace_file_name)); - __conf_file_name += ".conf"; - - std::ifstream __conf_file(__conf_file_name.c_str()); - - if (__conf_file.is_open()) - { - std::string __line; - - while (std::getline(__conf_file, __line)) - { - std::string::size_type __i = __line.find_first_not_of(" \t\n\v"); - - if (__line.length() <= 0 || __line[__i] == '#') - // Skip empty lines or comments. - continue; - } - - // Trim. - __line.erase(__remove(__line.begin(), __line.end(), ' '), - __line.end()); - std::string::size_type __pos = __line.find("="); - std::string __factor_name = __line.substr(0, __pos); - std::string::size_type __end = __line.find_first_of(";\n"); - std::string __factor_value = __line.substr(__pos + 1, __end - __pos); - - _GLIBCXX_PROFILE_DATA(__env)[__factor_name] = __factor_value; - } - } - - struct __cost_factor_writer - { - FILE* __file; - - __cost_factor_writer(FILE* __f) - : __file(__f) { } - - void - operator() (const __cost_factor* __factor) - { std::fprintf(__file, "%s = %f\n", __factor->__env_var, - __factor->__value); } - }; - - inline void - __write_cost_factors() - { - FILE* __file = __open_output_file("conf.out"); - __for_each(_GLIBCXX_PROFILE_DATA(__cost_factors)->begin(), - _GLIBCXX_PROFILE_DATA(__cost_factors)->end(), - __cost_factor_writer(__file)); - std::fclose(__file); - } - - struct __cost_factor_setter - { - void - operator()(__cost_factor* __factor) - { - // Look it up in the process environment first. - const char* __env_value = std::getenv(__factor->__env_var); - - if (!__env_value) - { - // Look it up in the config file. - __env_t::iterator __it - = _GLIBCXX_PROFILE_DATA(__env).find(__factor->__env_var); - if (__it != _GLIBCXX_PROFILE_DATA(__env).end()) - __env_value = __it->second.c_str(); - } - - if (__env_value) - __factor->__value = std::atof(__env_value); - } - }; - - inline void - __set_cost_factors() - { - __cost_factor_vector* __factors = new __cost_factor_vector; - _GLIBCXX_PROFILE_DATA(__cost_factors) = __factors; - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__vector_resize_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__list_shift_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__list_resize_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__map_insert_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__map_erase_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__map_find_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__map_iterate_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__umap_insert_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__umap_erase_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__umap_find_cost_factor)); - __factors->push_back(&_GLIBCXX_PROFILE_DATA(__umap_iterate_cost_factor)); - __for_each(__factors->begin(), __factors->end(), __cost_factor_setter()); - } - - inline void - __profcxx_init_unconditional() - { - __gnu_cxx::__scoped_lock __lock(_GLIBCXX_PROFILE_DATA(__global_mutex)); - - if (__is_invalid()) - { - __set_max_warn_count(); - - if (_GLIBCXX_PROFILE_DATA(_S_max_warn_count) == 0) - __turn_off(); - else - { - __set_max_stack_trace_depth(); - __set_max_mem(); - __set_trace_path(); - __read_cost_factors(); - __set_cost_factors(); - __write_cost_factors(); - - __trace_vector_size_init(); - __trace_hashtable_size_init(); - __trace_hash_func_init(); - __trace_vector_to_list_init(); - __trace_list_to_slist_init(); - __trace_list_to_vector_init(); - __trace_map_to_unordered_map_init(); - - std::atexit(__report_and_free); - - __turn_on(); - } - } - } - - /** @brief This function must be called by each instrumentation point. - * - * The common path is inlined fully. - */ - inline bool - __profcxx_init() - { - if (__is_invalid()) - __profcxx_init_unconditional(); - - return __is_on(); - } - -} // namespace __gnu_profile - -#endif /* _GLIBCXX_PROFILE_PROFILER_TRACE_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_vector_size.h b/libstdc++-v3/include/profile/impl/profiler_vector_size.h deleted file mode 100644 index 106468e1898..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_vector_size.h +++ /dev/null @@ -1,100 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_vector_size.h - * @brief Collection of vector size traces. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_VECTOR_SIZE_H -#define _GLIBCXX_PROFILE_PROFILER_VECTOR_SIZE_H 1 - -#include "profile/impl/profiler.h" -#include "profile/impl/profiler_node.h" -#include "profile/impl/profiler_trace.h" -#include "profile/impl/profiler_state.h" -#include "profile/impl/profiler_container_size.h" - -namespace __gnu_profile -{ - /** @brief Hashtable size instrumentation trace producer. */ - class __trace_vector_size - : public __trace_container_size - { - public: - __trace_vector_size() - : __trace_container_size() - { __id = "vector-size"; } - }; - - inline void - __trace_vector_size_init() - { _GLIBCXX_PROFILE_DATA(_S_vector_size) = new __trace_vector_size(); } - - inline void - __trace_vector_size_free() - { delete _GLIBCXX_PROFILE_DATA(_S_vector_size); } - - inline void - __trace_vector_size_report(FILE* __f, __warning_vector_t& __warnings) - { __trace_report(_GLIBCXX_PROFILE_DATA(_S_vector_size), __f, __warnings); } - - inline __container_size_info* - __trace_vector_size_construct(std::size_t __num) - { - if (!__profcxx_init()) - return 0; - - if (!__reentrance_guard::__get_in()) - return 0; - - __reentrance_guard __get_out; - return _GLIBCXX_PROFILE_DATA(_S_vector_size)-> - __insert(__get_stack(), __num); - } - - inline void - __trace_vector_size_resize(__container_size_info* __obj_info, - std::size_t __from, std::size_t __to) - { - if (!__obj_info) - return; - - __obj_info->__resize(__from, __to); - } - - inline void - __trace_vector_size_destruct(__container_size_info* __obj_info, - std::size_t __num, std::size_t __inum) - { - if (!__obj_info) - return; - - _GLIBCXX_PROFILE_DATA(_S_vector_size)-> - __destruct(__obj_info, __num, __inum); - } - -} // namespace __gnu_profile - -#endif /* _GLIBCXX_PROFILE_PROFILER_VECTOR_SIZE_H */ diff --git a/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h b/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h deleted file mode 100644 index ae3d3e7cf46..00000000000 --- a/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h +++ /dev/null @@ -1,261 +0,0 @@ -// -*- C++ -*- -// -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/impl/profiler_vector_to_list.h - * @brief diagnostics for vector to list. - */ - -// Written by Lixia Liu and Silvius Rus. - -#ifndef _GLIBCXX_PROFILE_PROFILER_VECTOR_TO_LIST_H -#define _GLIBCXX_PROFILE_PROFILER_VECTOR_TO_LIST_H 1 - -#include "profile/impl/profiler.h" -#include "profile/impl/profiler_node.h" -#include "profile/impl/profiler_trace.h" - -namespace __gnu_profile -{ - /** @brief A vector-to-list instrumentation line in the object table. */ - class __vector2list_info - : public __object_info_base - { - public: - __vector2list_info(__stack_t __stack) - : __object_info_base(__stack), _M_shift_count(0), _M_iterate(0), - _M_resize(0), _M_list_cost(0), _M_vector_cost(0) - { } - - void - __merge(const __vector2list_info& __o) - { - __object_info_base::__merge(__o); - _M_shift_count += __o._M_shift_count; - _M_iterate += __o._M_iterate; - _M_vector_cost += __o._M_vector_cost; - _M_list_cost += __o._M_list_cost; - _M_resize += __o._M_resize; - } - - void - __write(FILE* __f) const - { - std::fprintf(__f, "%Zu %Zu %Zu %.0f %.0f\n", _M_shift_count, - _M_resize, _M_iterate, _M_vector_cost, _M_list_cost); - } - - float - __magnitude() const - { return _M_vector_cost - _M_list_cost; } - - std::string - __advice() const - { return "change std::vector to std::list"; } - - std::size_t - __shift_count() - { return _M_shift_count; } - - std::size_t - __iterate() - { return _M_iterate; } - - float - __list_cost() - { return _M_list_cost; } - - std::size_t - __resize() - { return _M_resize; } - - void - __set_list_cost(float __lc) - { _M_list_cost = __lc; } - - void - __set_vector_cost(float __vc) - { _M_vector_cost = __vc; } - - void - __opr_insert(std::size_t __pos, std::size_t __num) - { _M_shift_count += __num - __pos; } - - void - __opr_iterate(int __num) - { __gnu_cxx::__atomic_add(&_M_iterate, __num); } - - void - __resize(std::size_t __from, std::size_t) - { _M_resize += __from; } - - private: - std::size_t _M_shift_count; - mutable _Atomic_word _M_iterate; - std::size_t _M_resize; - float _M_list_cost; - float _M_vector_cost; - }; - - - /** @brief A vector-to-list instrumentation line in the stack table. */ - class __vector2list_stack_info - : public __vector2list_info - { - public: - __vector2list_stack_info(const __vector2list_info& __o) - : __vector2list_info(__o) { } - }; - - - /** @brief Vector-to-list instrumentation producer. */ - class __trace_vector_to_list - : public __trace_base<__vector2list_info, __vector2list_stack_info> - { - public: - __trace_vector_to_list() - : __trace_base<__vector2list_info, __vector2list_stack_info>() - { __id = "vector-to-list"; } - - ~__trace_vector_to_list() { } - - // Call at destruction/clean to set container final size. - void - __destruct(__vector2list_info* __obj_info) - { - float __vc = __vector_cost(__obj_info->__shift_count(), - __obj_info->__iterate(), - __obj_info->__resize()); - float __lc = __list_cost(__obj_info->__shift_count(), - __obj_info->__iterate(), - __obj_info->__resize()); - __obj_info->__set_vector_cost(__vc); - __obj_info->__set_list_cost(__lc); - - __retire_object(__obj_info); - } - - // Collect cost of operations. - float - __vector_cost(std::size_t __shift, std::size_t __iterate, - std::size_t __resize) - { - return (__shift - * _GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor).__value - + __iterate - * _GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor).__value - + __resize - * _GLIBCXX_PROFILE_DATA(__vector_resize_cost_factor).__value); - } - - float - __list_cost(std::size_t __shift, std::size_t __iterate, - std::size_t __resize) - { - return (__shift - * _GLIBCXX_PROFILE_DATA(__list_shift_cost_factor).__value - + __iterate - * _GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor).__value - + __resize - * _GLIBCXX_PROFILE_DATA(__list_resize_cost_factor).__value); - } - }; - - - inline void - __trace_vector_to_list_init() - { _GLIBCXX_PROFILE_DATA(_S_vector_to_list) = new __trace_vector_to_list(); } - - inline void - __trace_vector_to_list_free() - { delete _GLIBCXX_PROFILE_DATA(_S_vector_to_list); } - - inline void - __trace_vector_to_list_report(FILE* __f, __warning_vector_t& __warnings) - { __trace_report(_GLIBCXX_PROFILE_DATA(_S_vector_to_list), __f, __warnings); } - - inline __vector2list_info* - __trace_vector_to_list_construct() - { - if (!__profcxx_init()) - return 0; - - if (!__reentrance_guard::__get_in()) - return 0; - - __reentrance_guard __get_out; - return _GLIBCXX_PROFILE_DATA(_S_vector_to_list) - ->__add_object(__get_stack()); - } - - inline void - __trace_vector_to_list_insert(__vector2list_info* __obj_info, - std::size_t __pos, - std::size_t __num) - { - if (!__obj_info) - return; - - __obj_info->__opr_insert(__pos, __num); - } - - inline void - __trace_vector_to_list_iterate(__vector2list_info* __obj_info, int) - { - if (!__obj_info) - return; - - // We only collect if an iteration took place no matter in what side. - __obj_info->__opr_iterate(1); - } - - inline void - __trace_vector_to_list_invalid_operator(__vector2list_info* __obj_info) - { - if (!__obj_info) - return; - - __obj_info->__set_invalid(); - } - - inline void - __trace_vector_to_list_resize(__vector2list_info* __obj_info, - std::size_t __from, - std::size_t __to) - { - if (!__obj_info) - return; - - __obj_info->__resize(__from, __to); - } - - inline void - __trace_vector_to_list_destruct(__vector2list_info* __obj_info) - { - if (!__obj_info) - return; - - _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__destruct(__obj_info); - } - -} // namespace __gnu_profile -#endif /* _GLIBCXX_PROFILE_PROFILER_VECTOR_TO_LIST_H */ diff --git a/libstdc++-v3/include/profile/iterator_tracker.h b/libstdc++-v3/include/profile/iterator_tracker.h deleted file mode 100644 index 9f14c14b27d..00000000000 --- a/libstdc++-v3/include/profile/iterator_tracker.h +++ /dev/null @@ -1,286 +0,0 @@ -// Profiling iterator implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/iterator_tracker.h - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_ITERATOR_TRACKER -#define _GLIBCXX_PROFILE_ITERATOR_TRACKER 1 - -#include <ext/type_traits.h> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - template<typename _Iterator, typename _Sequence> - class __iterator_tracker - { - typedef __iterator_tracker _Self; - - // The underlying iterator - _Iterator _M_current; - - // The underlying data structure - const _Sequence* _M_ds; - typedef std::iterator_traits<_Iterator> _Traits; - - public: - typedef _Iterator _Base_iterator; - typedef typename _Traits::iterator_category iterator_category; - typedef typename _Traits::value_type value_type; - typedef typename _Traits::difference_type difference_type; - typedef typename _Traits::reference reference; - typedef typename _Traits::pointer pointer; - - __iterator_tracker() _GLIBCXX_NOEXCEPT - : _M_current(), _M_ds(0) { } - - __iterator_tracker(const _Iterator& __i, const _Sequence* __seq) - _GLIBCXX_NOEXCEPT - : _M_current(__i), _M_ds(__seq) { } - - __iterator_tracker(const __iterator_tracker& __x) _GLIBCXX_NOEXCEPT - : _M_current(__x._M_current), _M_ds(__x._M_ds) { } - - template<typename _MutableIterator> - __iterator_tracker(const __iterator_tracker<_MutableIterator, - typename __gnu_cxx::__enable_if - <(std::__are_same<_MutableIterator, typename - _Sequence::iterator::_Base_iterator>::__value), - _Sequence>::__type>& __x) _GLIBCXX_NOEXCEPT - : _M_current(__x.base()), _M_ds(__x._M_get_sequence()) { } - - _Iterator - base() const _GLIBCXX_NOEXCEPT { return _M_current; } - - /** - * @brief Conversion to underlying non-debug iterator to allow - * better interaction with non-profile containers. - */ - operator _Iterator() const _GLIBCXX_NOEXCEPT { return _M_current; } - - pointer - operator->() const _GLIBCXX_NOEXCEPT { return &*_M_current; } - - __iterator_tracker& - operator++() _GLIBCXX_NOEXCEPT - { - _M_ds->_M_profile_iterate(); - ++_M_current; - return *this; - } - - __iterator_tracker - operator++(int) _GLIBCXX_NOEXCEPT - { - _M_ds->_M_profile_iterate(); - __iterator_tracker __tmp(*this); - ++_M_current; - return __tmp; - } - - __iterator_tracker& - operator--() _GLIBCXX_NOEXCEPT - { - _M_ds->_M_profile_iterate(1); - --_M_current; - return *this; - } - - __iterator_tracker - operator--(int) _GLIBCXX_NOEXCEPT - { - _M_ds->_M_profile_iterate(1); - __iterator_tracker __tmp(*this); - --_M_current; - return __tmp; - } - - __iterator_tracker& - operator=(const __iterator_tracker& __x) _GLIBCXX_NOEXCEPT - { - _M_current = __x._M_current; - _M_ds = __x._M_ds; - return *this; - } - - reference - operator*() const _GLIBCXX_NOEXCEPT - { return *_M_current; } - - // ------ Random access iterator requirements ------ - reference - operator[](const difference_type& __n) const _GLIBCXX_NOEXCEPT - { return _M_current[__n]; } - - __iterator_tracker& - operator+=(const difference_type& __n) _GLIBCXX_NOEXCEPT - { - _M_current += __n; - return *this; - } - - __iterator_tracker - operator+(const difference_type& __n) const _GLIBCXX_NOEXCEPT - { - __iterator_tracker __tmp(*this); - __tmp += __n; - return __tmp; - } - - __iterator_tracker& - operator-=(const difference_type& __n) _GLIBCXX_NOEXCEPT - { - _M_current += -__n; - return *this; - } - - __iterator_tracker - operator-(const difference_type& __n) const _GLIBCXX_NOEXCEPT - { - __iterator_tracker __tmp(*this); - __tmp -= __n; - return __tmp; - } - - const _Sequence* - _M_get_sequence() const - { return static_cast<const _Sequence*>(_M_ds); } - }; - - template<typename _IteratorL, typename _IteratorR, typename _Sequence> - inline bool - operator==(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, - const __iterator_tracker<_IteratorR, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() == __rhs.base(); } - - template<typename _Iterator, typename _Sequence> - inline bool - operator==(const __iterator_tracker<_Iterator, _Sequence>& __lhs, - const __iterator_tracker<_Iterator, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() == __rhs.base(); } - - template<typename _IteratorL, typename _IteratorR, typename _Sequence> - inline bool - operator!=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, - const __iterator_tracker<_IteratorR, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() != __rhs.base(); } - - template<typename _Iterator, typename _Sequence> - inline bool - operator!=(const __iterator_tracker<_Iterator, _Sequence>& __lhs, - const __iterator_tracker<_Iterator, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() != __rhs.base(); } - - template<typename _IteratorL, typename _IteratorR, typename _Sequence> - inline bool - operator<(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, - const __iterator_tracker<_IteratorR, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() < __rhs.base(); } - - template<typename _Iterator, typename _Sequence> - inline bool - operator<(const __iterator_tracker<_Iterator, _Sequence>& __lhs, - const __iterator_tracker<_Iterator, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() < __rhs.base(); } - - template<typename _IteratorL, typename _IteratorR, typename _Sequence> - inline bool - operator<=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, - const __iterator_tracker<_IteratorR, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() <= __rhs.base(); } - - template<typename _Iterator, typename _Sequence> - inline bool - operator<=(const __iterator_tracker<_Iterator, _Sequence>& __lhs, - const __iterator_tracker<_Iterator, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() <= __rhs.base(); } - - template<typename _IteratorL, typename _IteratorR, typename _Sequence> - inline bool - operator>(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, - const __iterator_tracker<_IteratorR, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() > __rhs.base(); } - - template<typename _Iterator, typename _Sequence> - inline bool - operator>(const __iterator_tracker<_Iterator, _Sequence>& __lhs, - const __iterator_tracker<_Iterator, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() > __rhs.base(); } - - template<typename _IteratorL, typename _IteratorR, typename _Sequence> - inline bool - operator>=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, - const __iterator_tracker<_IteratorR, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() >= __rhs.base(); } - - template<typename _Iterator, typename _Sequence> - inline bool - operator>=(const __iterator_tracker<_Iterator, _Sequence>& __lhs, - const __iterator_tracker<_Iterator, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() >= __rhs.base(); } - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // According to the resolution of DR179 not only the various comparison - // operators but also operator- must accept mixed iterator/const_iterator - // parameters. - template<typename _IteratorL, typename _IteratorR, typename _Sequence> - inline typename __iterator_tracker<_IteratorL, _Sequence>::difference_type - operator-(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, - const __iterator_tracker<_IteratorR, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() - __rhs.base(); } - - template<typename _Iterator, typename _Sequence> - inline typename __iterator_tracker<_Iterator, _Sequence>::difference_type - operator-(const __iterator_tracker<_Iterator, _Sequence>& __lhs, - const __iterator_tracker<_Iterator, _Sequence>& __rhs) - _GLIBCXX_NOEXCEPT - { return __lhs.base() - __rhs.base(); } - - template<typename _Iterator, typename _Sequence> - inline __iterator_tracker<_Iterator, _Sequence> - operator+(typename __iterator_tracker<_Iterator,_Sequence>::difference_type - __n, - const __iterator_tracker<_Iterator, _Sequence>& __i) - _GLIBCXX_NOEXCEPT - { return __i + __n; } - -} // namespace __profile -} // namespace std -#endif diff --git a/libstdc++-v3/include/profile/list b/libstdc++-v3/include/profile/list deleted file mode 100644 index a0bc63d957e..00000000000 --- a/libstdc++-v3/include/profile/list +++ /dev/null @@ -1,650 +0,0 @@ -// Profiling list implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/list - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_LIST -#define _GLIBCXX_PROFILE_LIST 1 - -#include <list> -#include <profile/base.h> -#include <profile/iterator_tracker.h> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - template<typename _List> - class _List_profile - { - _List& - _M_conjure() - { return *static_cast<_List*>(this); } - - public: - __gnu_profile::__list2slist_info* _M_list2slist_info; - __gnu_profile::__list2vector_info* _M_list2vector_info; - - _List_profile() _GLIBCXX_NOEXCEPT - { _M_profile_construct(); } - - void - _M_profile_construct() _GLIBCXX_NOEXCEPT - { - _M_list2slist_info = __profcxx_list2slist_construct(); - _M_list2vector_info = __profcxx_list2vector_construct(); - } - - void - _M_profile_destruct() _GLIBCXX_NOEXCEPT - { - __profcxx_list2vector_destruct(_M_list2vector_info); - _M_list2vector_info = 0; - __profcxx_list2slist_destruct(_M_list2slist_info); - _M_list2slist_info = 0; - } - - void - _M_swap(_List_profile& __other) - { - std::swap(_M_list2slist_info, __other._M_list2slist_info); - std::swap(_M_list2vector_info, __other._M_list2vector_info); - } - -#if __cplusplus >= 201103L - _List_profile(const _List_profile&) noexcept - : _List_profile() { } - _List_profile(_List_profile&& __other) noexcept - : _List_profile() - { _M_swap(__other); } - - _List_profile& - operator=(const _List_profile&) noexcept - { - _M_profile_destruct(); - _M_profile_construct(); - } - - _List_profile& - operator=(_List_profile&& __other) noexcept - { - _M_swap(__other); - __other._M_profile_destruct(); - __other._M_profile_construct(); - } -#endif - - ~_List_profile() - { _M_profile_destruct(); } - }; - - /** @brief List wrapper with performance instrumentation. */ - template<typename _Tp, typename _Allocator = std::allocator<_Tp> > - class list - : public _GLIBCXX_STD_C::list<_Tp, _Allocator>, - public _List_profile<list<_Tp, _Allocator> > - { - typedef _GLIBCXX_STD_C::list<_Tp, _Allocator> _Base; - - public: - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef __iterator_tracker<typename _Base::iterator, list> - iterator; - typedef __iterator_tracker<typename _Base::const_iterator, list> - const_iterator; - - typedef typename _Base::size_type size_type; - typedef typename _Base::difference_type difference_type; - - typedef _Tp value_type; - typedef _Allocator allocator_type; - typedef typename _Base::pointer pointer; - typedef typename _Base::const_pointer const_pointer; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - - // 23.2.2.1 construct/copy/destroy: - -#if __cplusplus < 201103L - list() { } - list(const list& __x) - : _Base(__x) { } - - ~list() { } -#else - list() = default; - list(const list&) = default; - list(list&&) = default; - ~list() = default; - - list(initializer_list<value_type> __l, - const allocator_type& __a = allocator_type()) - : _Base(__l, __a) { } - - list(const list& __x, const allocator_type& __a) - : _Base(__x, __a) { } - - list(list&& __x, const allocator_type& __a) - : _Base(std::move(__x), __a) { } -#endif - - explicit - list(const _Allocator& __a) _GLIBCXX_NOEXCEPT - : _Base(__a) { } - -#if __cplusplus >= 201103L - explicit - list(size_type __n, const allocator_type& __a = allocator_type()) - : _Base(__n, __a) { } - - list(size_type __n, const _Tp& __value, - const _Allocator& __a = _Allocator()) - : _Base(__n, __value, __a) { } -#else - explicit - list(size_type __n, const _Tp& __value = _Tp(), - const _Allocator& __a = _Allocator()) - : _Base(__n, __value, __a) { } -#endif - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> -#else - template<class _InputIterator> -#endif - list(_InputIterator __first, _InputIterator __last, - const _Allocator& __a = _Allocator()) - : _Base(__first, __last, __a) { } - - list(const _Base& __x) - : _Base(__x) { } - -#if __cplusplus < 201103L - list& - operator=(const list& __x) - { - this->_M_profile_destruct(); - _M_base() = __x; - this->_M_profile_construct(); - return *this; - } -#else - list& - operator=(const list&) = default; - - list& - operator=(list&&) = default; - - list& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } -#endif - - // iterators: - iterator - begin() _GLIBCXX_NOEXCEPT - { return iterator(_Base::begin(), this); } - - const_iterator - begin() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::begin(), this); } - - iterator - end() _GLIBCXX_NOEXCEPT - { - __profcxx_list2slist_rewind(this->_M_list2slist_info); - return iterator(_Base::end(), this); - } - - const_iterator - end() const _GLIBCXX_NOEXCEPT - { - __profcxx_list2slist_rewind(this->_M_list2slist_info); - return const_iterator(_Base::end(), this); - } - - reverse_iterator - rbegin() _GLIBCXX_NOEXCEPT - { - __profcxx_list2slist_rewind(this->_M_list2slist_info); - return reverse_iterator(end()); - } - - const_reverse_iterator - rbegin() const _GLIBCXX_NOEXCEPT - { - __profcxx_list2slist_rewind(this->_M_list2slist_info); - return const_reverse_iterator(end()); - } - - reverse_iterator - rend() _GLIBCXX_NOEXCEPT - { return reverse_iterator(begin()); } - - const_reverse_iterator - rend() const _GLIBCXX_NOEXCEPT - { return const_reverse_iterator(begin()); } - -#if __cplusplus >= 201103L - const_iterator - cbegin() const noexcept - { return const_iterator(_Base::cbegin(), this); } - - const_iterator - cend() const noexcept - { return const_iterator(_Base::cend(), this); } - - const_reverse_iterator - crbegin() const noexcept - { return const_reverse_iterator(end()); } - - const_reverse_iterator - crend() const noexcept - { return const_reverse_iterator(begin()); } -#endif - - // 23.2.2.2 capacity: - reference - back() _GLIBCXX_NOEXCEPT - { - __profcxx_list2slist_rewind(this->_M_list2slist_info); - return _Base::back(); - } - - const_reference - back() const _GLIBCXX_NOEXCEPT - { - __profcxx_list2slist_rewind(this->_M_list2slist_info); - return _Base::back(); - } - - // 23.2.2.3 modifiers: - void - push_front(const value_type& __x) - { - __profcxx_list2vector_invalid_operator(this->_M_list2vector_info); - __profcxx_list2slist_operation(this->_M_list2slist_info); - _Base::push_front(__x); - } - - void - pop_front() _GLIBCXX_NOEXCEPT - { - __profcxx_list2slist_operation(this->_M_list2slist_info); - _Base::pop_front(); - } - - void - pop_back() _GLIBCXX_NOEXCEPT - { - _Base::pop_back(); - __profcxx_list2slist_rewind(this->_M_list2slist_info); - } - -#if __cplusplus >= 201103L - template<typename... _Args> - iterator - emplace(const_iterator __position, _Args&&... __args) - { - return iterator(_Base::emplace(__position.base(), - std::forward<_Args>(__args)...), - this); - } -#endif - - iterator -#if __cplusplus >= 201103L - insert(const_iterator __pos, const _Tp& __x) -#else - insert(iterator __pos, const _Tp& __x) -#endif - { - _M_profile_insert(__pos, this->size()); - return iterator(_Base::insert(__pos.base(), __x), this); - } - -#if __cplusplus >= 201103L - iterator - insert(const_iterator __pos, _Tp&& __x) - { - _M_profile_insert(__pos, this->size()); - return iterator(_Base::emplace(__pos.base(), std::move(__x)), - this); - } - - iterator - insert(const_iterator __pos, initializer_list<value_type> __l) - { - _M_profile_insert(__pos, this->size()); - return iterator(_Base::insert(__pos.base(), __l), this); - } -#endif - -#if __cplusplus >= 201103L - iterator - insert(const_iterator __pos, size_type __n, const _Tp& __x) - { - _M_profile_insert(__pos, this->size()); - return iterator(_Base::insert(__pos.base(), __n, __x), this); - } -#else - void - insert(iterator __pos, size_type __n, const _Tp& __x) - { - _M_profile_insert(__pos, this->size()); - _Base::insert(__pos.base(), __n, __x); - } -#endif - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> - iterator - insert(const_iterator __pos, _InputIterator __first, - _InputIterator __last) - { - _M_profile_insert(__pos, this->size()); - return iterator(_Base::insert(__pos.base(), __first, __last), - this); - } -#else - template<class _InputIterator> - void - insert(iterator __pos, _InputIterator __first, - _InputIterator __last) - { - _M_profile_insert(__pos, this->size()); - _Base::insert(__pos.base(), __first, __last); - } -#endif - - iterator -#if __cplusplus >= 201103L - erase(const_iterator __pos) noexcept -#else - erase(iterator __pos) -#endif - { return iterator(_Base::erase(__pos.base()), this); } - - iterator -#if __cplusplus >= 201103L - erase(const_iterator __pos, const_iterator __last) noexcept -#else - erase(iterator __pos, iterator __last) -#endif - { - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 151. can't currently clear() empty container - return iterator(_Base::erase(__pos.base(), __last.base()), this); - } - - void - swap(list& __x) - _GLIBCXX_NOEXCEPT_IF( noexcept(declval<_Base&>().swap(__x)) ) - { - _Base::swap(__x); - this->_M_swap(__x); - } - - void - clear() _GLIBCXX_NOEXCEPT - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - // 23.2.2.4 list operations: - void -#if __cplusplus >= 201103L - splice(const_iterator __pos, list&& __x) noexcept -#else - splice(iterator __pos, list& __x) -#endif - { this->splice(__pos, _GLIBCXX_MOVE(__x), __x.begin(), __x.end()); } - -#if __cplusplus >= 201103L - void - splice(const_iterator __pos, list& __x) noexcept - { this->splice(__pos, std::move(__x)); } - - void - splice(const_iterator __pos, list& __x, const_iterator __i) - { this->splice(__pos, std::move(__x), __i); } -#endif - - void -#if __cplusplus >= 201103L - splice(const_iterator __pos, list&& __x, const_iterator __i) noexcept -#else - splice(iterator __pos, list& __x, iterator __i) -#endif - { - // We used to perform the splice_alloc check: not anymore, redundant - // after implementing the relevant bits of N1599. - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - _Base::splice(__pos.base(), _GLIBCXX_MOVE(__x._M_base()), - __i.base()); - } - - void -#if __cplusplus >= 201103L - splice(const_iterator __pos, list&& __x, const_iterator __first, - const_iterator __last) noexcept -#else - splice(iterator __pos, list& __x, iterator __first, - iterator __last) -#endif - { - _Base::splice(__pos.base(), _GLIBCXX_MOVE(__x._M_base()), - __first.base(), __last.base()); - } - -#if __cplusplus >= 201103L - void - splice(const_iterator __pos, list& __x, - const_iterator __first, const_iterator __last) noexcept - { this->splice(__pos, std::move(__x), __first, __last); } -#endif - - void - remove(const _Tp& __value) - { - for (iterator __x = begin(); __x != end(); ) - { - if (*__x == __value) - __x = erase(__x); - else - ++__x; - } - } - - template<class _Predicate> - void - remove_if(_Predicate __pred) - { - for (iterator __x = begin(); __x != end(); ) - { - __profcxx_list2slist_operation(this->_M_list2slist_info); - if (__pred(*__x)) - __x = erase(__x); - else - ++__x; - } - } - - void - unique() - { - iterator __first = begin(); - iterator __last = end(); - if (__first == __last) - return; - iterator __next = __first; - while (++__next != __last) - { - __profcxx_list2slist_operation(this->_M_list2slist_info); - if (*__first == *__next) - erase(__next); - else - __first = __next; - __next = __first; - } - } - - template<class _BinaryPredicate> - void - unique(_BinaryPredicate __binary_pred) - { - iterator __first = begin(); - iterator __last = end(); - if (__first == __last) - return; - iterator __next = __first; - while (++__next != __last) - { - __profcxx_list2slist_operation(this->_M_list2slist_info); - if (__binary_pred(*__first, *__next)) - erase(__next); - else - __first = __next; - __next = __first; - } - } - - void -#if __cplusplus >= 201103L - merge(list&& __x) -#else - merge(list& __x) -#endif - { _Base::merge(_GLIBCXX_MOVE(__x._M_base())); } - -#if __cplusplus >= 201103L - void - merge(list& __x) - { this->merge(std::move(__x)); } -#endif - - template<class _Compare> - void -#if __cplusplus >= 201103L - merge(list&& __x, _Compare __comp) -#else - merge(list& __x, _Compare __comp) -#endif - { _Base::merge(_GLIBCXX_MOVE(__x._M_base()), __comp); } - -#if __cplusplus >= 201103L - template<typename _Compare> - void - merge(list& __x, _Compare __comp) - { this->merge(std::move(__x), __comp); } -#endif - - _Base& - _M_base() _GLIBCXX_NOEXCEPT { return *this; } - - const _Base& - _M_base() const _GLIBCXX_NOEXCEPT { return *this; } - - void _M_profile_iterate(int __rewind = 0) const - { - __profcxx_list2slist_operation(this->_M_list2slist_info); - __profcxx_list2vector_iterate(this->_M_list2vector_info, __rewind); - if (__rewind) - __profcxx_list2slist_rewind(this->_M_list2slist_info); - } - - private: - size_type - _M_profile_insert(const_iterator __pos, size_type __size) - { - size_type __shift = 0; - typename _Base::const_iterator __it = __pos.base(); - for (; __it != _Base::end(); ++__it) - __shift++; - __profcxx_list2slist_rewind(this->_M_list2slist_info); - __profcxx_list2slist_operation(this->_M_list2slist_info); - __profcxx_list2vector_insert(this->_M_list2vector_info, __shift, __size); - } - }; - - template<typename _Tp, typename _Alloc> - inline bool - operator==(const list<_Tp, _Alloc>& __lhs, - const list<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() == __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator!=(const list<_Tp, _Alloc>& __lhs, - const list<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() != __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator<(const list<_Tp, _Alloc>& __lhs, - const list<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() < __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator<=(const list<_Tp, _Alloc>& __lhs, - const list<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() <= __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator>=(const list<_Tp, _Alloc>& __lhs, - const list<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() >= __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator>(const list<_Tp, _Alloc>& __lhs, - const list<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() > __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline void - swap(list<_Tp, _Alloc>& __lhs, list<_Tp, _Alloc>& __rhs) - _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs))) - { __lhs.swap(__rhs); } - -} // namespace __profile -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/map b/libstdc++-v3/include/profile/map deleted file mode 100644 index dc96293606a..00000000000 --- a/libstdc++-v3/include/profile/map +++ /dev/null @@ -1,35 +0,0 @@ -// Profiling map/multimap implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/map - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_MAP -#define _GLIBCXX_PROFILE_MAP 1 - -#include <map> -#include <profile/map.h> -#include <profile/multimap.h> - -#endif diff --git a/libstdc++-v3/include/profile/map.h b/libstdc++-v3/include/profile/map.h deleted file mode 100644 index c8b9a5a5229..00000000000 --- a/libstdc++-v3/include/profile/map.h +++ /dev/null @@ -1,705 +0,0 @@ -// Profiling map implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/map.h - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_MAP_H -#define _GLIBCXX_PROFILE_MAP_H 1 - -#include <profile/base.h> -#include <profile/ordered_base.h> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /// Class std::map wrapper with performance instrumentation. - template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>, - typename _Allocator = std::allocator<std::pair<const _Key, _Tp> > > - class map - : public _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Allocator>, - public _Ordered_profile<map<_Key, _Tp, _Compare, _Allocator> > - { - typedef _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Allocator> _Base; - - typedef typename _Base::iterator _Base_iterator; - typedef typename _Base::const_iterator _Base_const_iterator; - - public: - // types: - typedef _Key key_type; - typedef _Tp mapped_type; - typedef typename _Base::value_type value_type; - typedef _Compare key_compare; - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef __iterator_tracker<_Base_iterator, map> iterator; - typedef __iterator_tracker<_Base_const_iterator, - map> const_iterator; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - - typedef typename _Base::size_type size_type; - typedef typename _Base::difference_type difference_type; - - // 23.3.1.1 construct/copy/destroy: - -#if __cplusplus < 201103L - map() - : _Base() { } - map(const map& __x) - : _Base(__x) { } - ~map() - { } -#else - map() = default; - map(const map&) = default; - map(map&&) = default; - ~map() = default; -#endif - - explicit - map(const _Compare& __comp, - const _Allocator& __a = _Allocator()) - : _Base(__comp, __a) { } - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> -#else - template<typename _InputIterator> -#endif - map(_InputIterator __first, _InputIterator __last, - const _Compare& __comp = _Compare(), - const _Allocator& __a = _Allocator()) - : _Base(__first, __last, __comp, __a) { } - - map(const _Base& __x) - : _Base(__x) { } - -#if __cplusplus >= 201103L - map(initializer_list<value_type> __l, - const _Compare& __c = _Compare(), - const _Allocator& __a = _Allocator()) - : _Base(__l, __c, __a) { } - - explicit - map(const _Allocator& __a) - : _Base(__a) { } - - map(const map& __x, const _Allocator& __a) - : _Base(__x, __a) { } - - map(map&& __x, const _Allocator& __a) - noexcept( noexcept(_Base(std::move(__x), __a)) ) - : _Base(std::move(__x), __a) { } - - map(initializer_list<value_type> __l, const _Allocator& __a) - : _Base(__l, __a) { } - - template<typename _InputIterator> - map(_InputIterator __first, _InputIterator __last, - const _Allocator& __a) - : _Base(__first, __last, __a) { } -#endif - -#if __cplusplus < 201103L - map& - operator=(const map& __x) - { - this->_M_profile_destruct(); - _M_base() = __x; - this->_M_profile_construct(); - return *this; - } -#else - map& - operator=(const map&) = default; - - map& - operator=(map&&) = default; - - map& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } -#endif - - // iterators - iterator - begin() _GLIBCXX_NOEXCEPT - { return iterator(_Base::begin(), this); } - - const_iterator - begin() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::begin(), this); } - - iterator - end() _GLIBCXX_NOEXCEPT - { return iterator(_Base::end(), this); } - - const_iterator - end() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::end(), this); } - -#if __cplusplus >= 201103L - const_iterator - cbegin() const noexcept - { return const_iterator(_Base::cbegin(), this); } - - const_iterator - cend() const noexcept - { return const_iterator(_Base::cend(), this); } -#endif - - reverse_iterator - rbegin() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return reverse_iterator(end()); - } - - const_reverse_iterator - rbegin() const _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(end()); - } - - reverse_iterator - rend() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return reverse_iterator(begin()); - } - - const_reverse_iterator - rend() const _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(begin()); - } - -#if __cplusplus >= 201103L - const_reverse_iterator - crbegin() const noexcept - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(cend()); - } - - const_reverse_iterator - crend() const noexcept - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(cbegin()); - } -#endif - - // 23.3.1.2 element access: - mapped_type& - operator[](const key_type& __k) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::operator[](__k); - } - -#if __cplusplus >= 201103L - mapped_type& - operator[](key_type&& __k) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::operator[](std::move(__k)); - } -#endif - - mapped_type& - at(const key_type& __k) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::at(__k); - } - - const mapped_type& - at(const key_type& __k) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::at(__k); - } - - // modifiers: -#if __cplusplus >= 201103L - template<typename... _Args> - std::pair<iterator, bool> - emplace(_Args&&... __args) - { - // The cost is the same whether or not the element is inserted so we - // always report insertion of 1 element. - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - auto __base_ret = _Base::emplace(std::forward<_Args>(__args)...); - return std::make_pair(iterator(__base_ret.first, this), - __base_ret.second); - } - - template<typename... _Args> - iterator - emplace_hint(const_iterator __pos, _Args&&... __args) - { - auto size_before = this->size(); - auto __res - = _Base::emplace_hint(__pos.base(), std::forward<_Args>(__args)...); - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } -#endif - - std::pair<iterator, bool> - insert(const value_type& __x) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - std::pair<_Base_iterator, bool> __base_ret = _Base::insert(__x); - return std::make_pair(iterator(__base_ret.first, this), - __base_ret.second); - } - -#if __cplusplus >= 201103L - template<typename _Pair, typename = typename - std::enable_if<std::is_constructible<value_type, - _Pair&&>::value>::type> - std::pair<iterator, bool> - insert(_Pair&& __x) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - auto __base_ret= _Base::insert(std::forward<_Pair>(__x)); - return std::make_pair(iterator(__base_ret.first, this), - __base_ret.second); - } -#endif - -#if __cplusplus >= 201103L - void - insert(std::initializer_list<value_type> __list) - { insert(__list.begin(), __list.end()); } -#endif - - iterator -#if __cplusplus >= 201103L - insert(const_iterator __pos, const value_type& __x) -#else - insert(iterator __pos, const value_type& __x) -#endif - { - size_type size_before = this->size(); - _Base_iterator __res = _Base::insert(__pos.base(), __x); - - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } - -#if __cplusplus >= 201103L - template<typename _Pair, typename = typename - std::enable_if<std::is_constructible<value_type, - _Pair&&>::value>::type> - iterator - insert(const_iterator __pos, _Pair&& __x) - { - size_type size_before = this->size(); - auto __res = _Base::insert(__pos.base(), std::forward<_Pair>(__x)); - - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } -#endif - - template<typename _InputIterator> - void - insert(_InputIterator __first, _InputIterator __last) - { - for (; __first != __last; ++__first) - insert(*__first); - } - -#if __cplusplus >= 201103L - iterator - erase(const_iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::erase(__pos.base()), this); - } - - iterator - erase(iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::erase(__pos.base()), this); - } -#else - void - erase(iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - _Base::erase(__pos.base()); - } -#endif - - size_type - erase(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return _Base::erase(__x); - } - -#if __cplusplus >= 201103L - iterator - erase(const_iterator __first, const_iterator __last) - { - if (__first != __last) - { - iterator __ret; - for (; __first != __last;) - __ret = erase(__first++); - return __ret; - } - else - return iterator(_Base::erase(__first.base(), __last.base()), this); - } -#else - void - erase(iterator __first, iterator __last) - { - for (; __first != __last;) - erase(__first++); - } -#endif - - void - swap(map& __x) - _GLIBCXX_NOEXCEPT_IF( noexcept(declval<_Base&>().swap(__x)) ) - { - _Base::swap(__x); - this->_M_swap(__x); - } - - void - clear() _GLIBCXX_NOEXCEPT - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - // 23.3.1.3 map operations: - iterator - find(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return iterator(_Base::find(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - find(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return { _Base::find(__x), this }; - } -#endif - - const_iterator - find(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return const_iterator(_Base::find(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - find(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return { _Base::find(__x), this }; - } -#endif - - size_type - count(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::count(__x); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - size_type - count(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::count(__x); - } -#endif - - iterator - lower_bound(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return iterator(_Base::lower_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - lower_bound(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::lower_bound(__x), this }; - } -#endif - - const_iterator - lower_bound(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_iterator(_Base::lower_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - lower_bound(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::lower_bound(__x), this }; - } -#endif - - iterator - upper_bound(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return iterator(_Base::upper_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - upper_bound(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::upper_bound(__x), this }; - } -#endif - - const_iterator - upper_bound(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_iterator(_Base::upper_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - upper_bound(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::upper_bound(__x), this }; - } -#endif - - std::pair<iterator,iterator> - equal_range(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - std::pair<_Base_iterator, _Base_iterator> __base_ret - = _Base::equal_range(__x); - return std::make_pair(iterator(__base_ret.first, this), - iterator(__base_ret.second, this)); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - std::pair<iterator, iterator> - equal_range(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - auto __res = _Base::equal_range(__x); - return { { __res.first, this }, { __res.second, this } }; - } -#endif - - std::pair<const_iterator,const_iterator> - equal_range(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - std::pair<_Base_const_iterator, _Base_const_iterator> __base_ret - = _Base::equal_range(__x); - return std::make_pair(const_iterator(__base_ret.first, this), - const_iterator(__base_ret.second, this)); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - std::pair<const_iterator, const_iterator> - equal_range(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - auto __res = _Base::equal_range(__x); - return { { __res.first, this }, { __res.second, this } }; - } -#endif - - _Base& - _M_base() _GLIBCXX_NOEXCEPT { return *this; } - - const _Base& - _M_base() const _GLIBCXX_NOEXCEPT { return *this; } - - private: - /** If hint is used we consider that the map and unordered_map - * operations have equivalent insertion cost so we do not update metrics - * about it. - * Note that to find out if hint has been used is libstdc++ - * implementation dependent. - */ - bool - _M_hint_used(_Base_const_iterator __hint, _Base_iterator __res) - { - return (__hint == __res - || (__hint == _M_base().end() && ++__res == _M_base().end()) - || (__hint != _M_base().end() && (++__hint == __res - || ++__res == --__hint))); - } - - - template<typename _K1, typename _T1, typename _C1, typename _A1> - friend bool - operator==(const map<_K1, _T1, _C1, _A1>&, - const map<_K1, _T1, _C1, _A1>&); - - template<typename _K1, typename _T1, typename _C1, typename _A1> - friend bool - operator<(const map<_K1, _T1, _C1, _A1>&, - const map<_K1, _T1, _C1, _A1>&); - }; - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator==(const map<_Key, _Tp, _Compare, _Allocator>& __lhs, - const map<_Key, _Tp, _Compare, _Allocator>& __rhs) - { - __profcxx_map2umap_invalidate(__lhs._M_map2umap_info); - __profcxx_map2umap_invalidate(__rhs._M_map2umap_info); - return __lhs._M_base() == __rhs._M_base(); - } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator<(const map<_Key, _Tp, _Compare, _Allocator>& __lhs, - const map<_Key, _Tp, _Compare, _Allocator>& __rhs) - { - __profcxx_map2umap_invalidate(__lhs._M_map2umap_info); - __profcxx_map2umap_invalidate(__rhs._M_map2umap_info); - return __lhs._M_base() < __rhs._M_base(); - } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator!=(const map<_Key, _Tp, _Compare, _Allocator>& __lhs, - const map<_Key, _Tp, _Compare, _Allocator>& __rhs) - { return !(__lhs == __rhs); } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator<=(const map<_Key, _Tp, _Compare, _Allocator>& __lhs, - const map<_Key, _Tp, _Compare, _Allocator>& __rhs) - { return !(__rhs < __lhs); } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator>=(const map<_Key, _Tp, _Compare, _Allocator>& __lhs, - const map<_Key, _Tp, _Compare, _Allocator>& __rhs) - { return !(__lhs < __rhs); } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator>(const map<_Key, _Tp, _Compare, _Allocator>& __lhs, - const map<_Key, _Tp, _Compare, _Allocator>& __rhs) - { return __rhs < __lhs; } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline void - swap(map<_Key, _Tp, _Compare, _Allocator>& __lhs, - map<_Key, _Tp, _Compare, _Allocator>& __rhs) - _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs))) - { __lhs.swap(__rhs); } - -} // namespace __profile -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/multimap.h b/libstdc++-v3/include/profile/multimap.h deleted file mode 100644 index 7d0af3d5e62..00000000000 --- a/libstdc++-v3/include/profile/multimap.h +++ /dev/null @@ -1,663 +0,0 @@ -// Profiling multimap implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/multimap.h - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_MULTIMAP_H -#define _GLIBCXX_PROFILE_MULTIMAP_H 1 - -#include <profile/base.h> -#include <profile/ordered_base.h> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /// Class std::multimap wrapper with performance instrumentation. - template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>, - typename _Allocator = std::allocator<std::pair<const _Key, _Tp> > > - class multimap - : public _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Allocator>, - public _Ordered_profile<map<_Key, _Tp, _Compare, _Allocator> > - { - typedef _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Allocator> _Base; - - typedef typename _Base::iterator _Base_iterator; - typedef typename _Base::const_iterator _Base_const_iterator; - - public: - // types: - typedef _Key key_type; - typedef _Tp mapped_type; - typedef std::pair<const _Key, _Tp> value_type; - typedef _Compare key_compare; - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef __iterator_tracker<_Base_iterator, - multimap> iterator; - typedef __iterator_tracker<_Base_const_iterator, - multimap> const_iterator; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - - typedef typename _Base::size_type size_type; - typedef typename _Base::difference_type difference_type; - - // 23.3.1.1 construct/copy/destroy: - -#if __cplusplus < 201103L - multimap() - : _Base() { } - multimap(const multimap& __x) - : _Base(__x) { } - ~multimap() { } -#else - multimap() = default; - multimap(const multimap&) = default; - multimap(multimap&&) = default; - ~multimap() = default; -#endif - - explicit multimap(const _Compare& __comp, - const _Allocator& __a = _Allocator()) - : _Base(__comp, __a) { } - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> -#else - template<typename _InputIterator> -#endif - multimap(_InputIterator __first, _InputIterator __last, - const _Compare& __comp = _Compare(), - const _Allocator& __a = _Allocator()) - : _Base(__first, __last, __comp, __a) { } - -#if __cplusplus >= 201103L - multimap(initializer_list<value_type> __l, - const _Compare& __c = _Compare(), - const _Allocator& __a = _Allocator()) - : _Base(__l, __c, __a) { } - - explicit - multimap(const _Allocator& __a) - : _Base(__a) { } - - multimap(const multimap& __x, const _Allocator& __a) - : _Base(__x, __a) { } - - multimap(multimap&& __x, const _Allocator& __a) - noexcept( noexcept(_Base(std::move(__x), __a)) ) - : _Base(std::move(__x), __a) { } - - multimap(initializer_list<value_type> __l, const _Allocator& __a) - : _Base(__l, __a) { } - - template<typename _InputIterator> - multimap(_InputIterator __first, _InputIterator __last, - const _Allocator& __a) - : _Base(__first, __last, __a) { } -#endif - - multimap(const _Base& __x) - : _Base(__x) { } - -#if __cplusplus < 201103L - multimap& - operator=(const multimap& __x) - { - this->_M_profile_destruct(); - _M_base() = __x; - this->_M_profile_construct(); - return *this; - } -#else - multimap& - operator=(const multimap&) = default; - - multimap& - operator=(multimap&&) = default; - - multimap& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } -#endif - - // iterators - iterator - begin() _GLIBCXX_NOEXCEPT - { return iterator(_Base::begin(), this); } - - const_iterator - begin() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::begin(), this); } - - iterator - end() _GLIBCXX_NOEXCEPT - { return iterator(_Base::end(), this); } - - const_iterator - end() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::end(), this); } - -#if __cplusplus >= 201103L - const_iterator - cbegin() const noexcept - { return const_iterator(_Base::cbegin(), this); } - - const_iterator - cend() const noexcept - { return const_iterator(_Base::cend(), this); } -#endif - - reverse_iterator - rbegin() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return reverse_iterator(end()); - } - - const_reverse_iterator - rbegin() const _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(end()); - } - - reverse_iterator - rend() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return reverse_iterator(begin()); - } - - const_reverse_iterator - rend() const _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(begin()); - } - -#if __cplusplus >= 201103L - const_reverse_iterator - crbegin() const noexcept - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(cend()); - } - - const_reverse_iterator - crend() const noexcept - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(cbegin()); - } -#endif - - // modifiers: -#if __cplusplus >= 201103L - template<typename... _Args> - iterator - emplace(_Args&&... __args) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::emplace(std::forward<_Args>(__args)...), this); - } - - template<typename... _Args> - iterator - emplace_hint(const_iterator __pos, _Args&&... __args) - { - auto size_before = this->size(); - auto __res - = _Base::emplace_hint(__pos.base(), std::forward<_Args>(__args)...); - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } -#endif - - iterator - insert(const value_type& __x) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::insert(__x), this); - } - -#if __cplusplus >= 201103L - template<typename _Pair, typename = typename - std::enable_if<std::is_constructible<value_type, - _Pair&&>::value>::type> - iterator - insert(_Pair&& __x) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::insert(std::forward<_Pair>(__x)), this); - } -#endif - -#if __cplusplus >= 201103L - void - insert(std::initializer_list<value_type> __list) - { insert(__list.begin(), __list.end()); } -#endif - - iterator -#if __cplusplus >= 201103L - insert(const_iterator __pos, const value_type& __x) -#else - insert(iterator __pos, const value_type& __x) -#endif - { - size_type size_before = this->size(); - _Base_iterator __res = _Base::insert(__pos.base(), __x); - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } - -#if __cplusplus >= 201103L - template<typename _Pair, typename = typename - std::enable_if<std::is_constructible<value_type, - _Pair&&>::value>::type> - iterator - insert(const_iterator __pos, _Pair&& __x) - { - size_type size_before = this->size(); - auto __res = _Base::insert(__pos.base(), std::forward<_Pair>(__x)); - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } -#endif - - template<typename _InputIterator> - void - insert(_InputIterator __first, _InputIterator __last) - { - for (; __first != __last; ++__first) - insert(*__first); - } - -#if __cplusplus >= 201103L - iterator - erase(const_iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::erase(__pos.base()), this); - } - - iterator - erase(iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::erase(__pos.base()), this); - } -#else - void - erase(iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - _Base::erase(__pos.base()); - } -#endif - - size_type - erase(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return _Base::erase(__x); - } - -#if __cplusplus >= 201103L - iterator - erase(const_iterator __first, const_iterator __last) - { - if (__first != __last) - { - iterator __ret; - for (; __first != __last;) - __ret = erase(__first++); - return __ret; - } - else - return iterator(_Base::erase(__first.base(), __last.base()), this); - } -#else - void - erase(iterator __first, iterator __last) - { - for (; __first != __last;) - erase(__first++); - } -#endif - - void - swap(multimap& __x) - _GLIBCXX_NOEXCEPT_IF( noexcept(declval<_Base&>().swap(__x)) ) - { - std::swap(this->_M_map2umap_info, __x._M_map2umap_info); - _Base::swap(__x); - } - - void - clear() _GLIBCXX_NOEXCEPT - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - // 23.3.1.3 multimap operations: - iterator - find(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return iterator(_Base::find(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - find(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return { _Base::find(__x), this }; - } -#endif - - const_iterator - find(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return const_iterator(_Base::find(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - find(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return { _Base::find(__x), this }; - } -#endif - - size_type - count(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::count(__x); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - size_type - count(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::count(__x); - } -#endif - - iterator - lower_bound(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return iterator(_Base::lower_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - lower_bound(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::lower_bound(__x), this }; - } -#endif - - const_iterator - lower_bound(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_iterator(_Base::lower_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - lower_bound(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::lower_bound(__x), this }; - } -#endif - - iterator - upper_bound(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return iterator(_Base::upper_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - upper_bound(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::upper_bound(__x), this }; - } -#endif - - const_iterator - upper_bound(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_iterator(_Base::upper_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - upper_bound(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::upper_bound(__x), this }; - } -#endif - - std::pair<iterator,iterator> - equal_range(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - std::pair<_Base_iterator, _Base_iterator> __base_ret - = _Base::equal_range(__x); - return std::make_pair(iterator(__base_ret.first, this), - iterator(__base_ret.second, this)); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - std::pair<iterator, iterator> - equal_range(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - auto __res = _Base::equal_range(__x); - return { { __res.first, this }, { __res.second, this } }; - } -#endif - - std::pair<const_iterator,const_iterator> - equal_range(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - std::pair<_Base_const_iterator, _Base_const_iterator> __base_ret - = _Base::equal_range(__x); - return std::make_pair(const_iterator(__base_ret.first, this), - const_iterator(__base_ret.second, this)); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - std::pair<const_iterator, const_iterator> - equal_range(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - auto __res = _Base::equal_range(__x); - return { { __res.first, this }, { __res.second, this } }; - } -#endif - - _Base& - _M_base() _GLIBCXX_NOEXCEPT { return *this; } - - const _Base& - _M_base() const _GLIBCXX_NOEXCEPT { return *this; } - - private: - /** If hint is used we consider that the map and unordered_map - * operations have equivalent insertion cost so we do not update metrics - * about it. - * Note that to find out if hint has been used is libstdc++ - * implementation dependent. - */ - bool - _M_hint_used(_Base_const_iterator __hint, _Base_iterator __res) - { - return (__hint == __res - || (__hint == _M_base().end() && ++__res == _M_base().end()) - || (__hint != _M_base().end() && (++__hint == __res - || ++__res == --__hint))); - } - - template<typename _K1, typename _T1, typename _C1, typename _A1> - friend bool - operator==(const multimap<_K1, _T1, _C1, _A1>&, - const multimap<_K1, _T1, _C1, _A1>&); - - template<typename _K1, typename _T1, typename _C1, typename _A1> - friend bool - operator<(const multimap<_K1, _T1, _C1, _A1>&, - const multimap<_K1, _T1, _C1, _A1>&); - }; - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator==(const multimap<_Key, _Tp, _Compare, _Allocator>& __lhs, - const multimap<_Key, _Tp, _Compare, _Allocator>& __rhs) - { - __profcxx_map2umap_invalidate(__lhs._M_map2umap_info); - __profcxx_map2umap_invalidate(__rhs._M_map2umap_info); - return __lhs._M_base() == __rhs._M_base(); - } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator<(const multimap<_Key, _Tp, _Compare, _Allocator>& __lhs, - const multimap<_Key, _Tp, _Compare, _Allocator>& __rhs) - { - __profcxx_map2umap_invalidate(__lhs._M_map2umap_info); - __profcxx_map2umap_invalidate(__rhs._M_map2umap_info); - return __lhs._M_base() < __rhs._M_base(); - } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator!=(const multimap<_Key, _Tp, _Compare, _Allocator>& __lhs, - const multimap<_Key, _Tp, _Compare, _Allocator>& __rhs) - { return !(__lhs == __rhs); } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator<=(const multimap<_Key, _Tp, _Compare, _Allocator>& __lhs, - const multimap<_Key, _Tp, _Compare, _Allocator>& __rhs) - { return !(__rhs < __lhs); } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator>=(const multimap<_Key, _Tp, _Compare, _Allocator>& __lhs, - const multimap<_Key, _Tp, _Compare, _Allocator>& __rhs) - { return !(__lhs < __rhs); } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline bool - operator>(const multimap<_Key, _Tp, _Compare, _Allocator>& __lhs, - const multimap<_Key, _Tp, _Compare, _Allocator>& __rhs) - { return __rhs < __lhs; } - - template<typename _Key, typename _Tp, - typename _Compare, typename _Allocator> - inline void - swap(multimap<_Key, _Tp, _Compare, _Allocator>& __lhs, - multimap<_Key, _Tp, _Compare, _Allocator>& __rhs) - _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs))) - { __lhs.swap(__rhs); } - -} // namespace __profile -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/multiset.h b/libstdc++-v3/include/profile/multiset.h deleted file mode 100644 index dcf7bc84cdd..00000000000 --- a/libstdc++-v3/include/profile/multiset.h +++ /dev/null @@ -1,647 +0,0 @@ -// Profiling multiset implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/multiset.h - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_MULTISET_H -#define _GLIBCXX_PROFILE_MULTISET_H 1 - -#include <profile/base.h> -#include <profile/ordered_base.h> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /// Class std::multiset wrapper with performance instrumentation. - template<typename _Key, typename _Compare = std::less<_Key>, - typename _Allocator = std::allocator<_Key> > - class multiset - : public _GLIBCXX_STD_C::multiset<_Key, _Compare, _Allocator>, - public _Ordered_profile<multiset<_Key, _Compare, _Allocator> > - { - typedef _GLIBCXX_STD_C::multiset<_Key, _Compare, _Allocator> _Base; - - typedef typename _Base::iterator _Base_iterator; - typedef typename _Base::const_iterator _Base_const_iterator; - - public: - // types: - typedef _Key key_type; - typedef _Key value_type; - typedef _Compare key_compare; - typedef _Compare value_compare; - typedef _Allocator allocator_type; - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef __iterator_tracker<_Base_iterator, - multiset> iterator; - typedef __iterator_tracker<_Base_const_iterator, - multiset> const_iterator; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - - typedef typename _Base::size_type size_type; - typedef typename _Base::difference_type difference_type; - - // 23.3.3.1 construct/copy/destroy: - -#if __cplusplus < 201103L - multiset() - : _Base() { } - multiset(const multiset& __x) - : _Base(__x) { } - ~multiset() { } -#else - multiset() = default; - multiset(const multiset&) = default; - multiset(multiset&&) = default; - ~multiset() = default; -#endif - - explicit multiset(const _Compare& __comp, - const _Allocator& __a = _Allocator()) - : _Base(__comp, __a) { } - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> -#else - template<typename _InputIterator> -#endif - multiset(_InputIterator __first, _InputIterator __last, - const _Compare& __comp = _Compare(), - const _Allocator& __a = _Allocator()) - : _Base(__first, __last, __comp, __a) { } - -#if __cplusplus >= 201103L - multiset(initializer_list<value_type> __l, - const _Compare& __comp = _Compare(), - const allocator_type& __a = allocator_type()) - : _Base(__l, __comp, __a) { } - - explicit - multiset(const allocator_type& __a) - : _Base(__a) { } - - multiset(const multiset& __x, const allocator_type& __a) - : _Base(__x, __a) { } - - multiset(multiset&& __x, const allocator_type& __a) - noexcept( noexcept(_Base(std::move(__x), __a)) ) - : _Base(std::move(__x), __a) { } - - multiset(initializer_list<value_type> __l, const allocator_type& __a) - : _Base(__l, __a) { } - - template<typename _InputIterator> - multiset(_InputIterator __first, _InputIterator __last, - const allocator_type& __a) - : _Base(__first, __last, __a) { } -#endif - - multiset(const _Base& __x) - : _Base(__x) { } - -#if __cplusplus < 201103L - multiset& - operator=(const multiset& __x) - { - this->_M_profile_destruct(); - _M_base() = __x; - this->_M_profile_construct(); - return *this; - } -#else - multiset& - operator=(const multiset&) = default; - - multiset& - operator=(multiset&&) = default; - - multiset& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } -#endif - - // iterators - iterator - begin() _GLIBCXX_NOEXCEPT - { return iterator(_Base::begin(), this); } - - const_iterator - begin() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::begin(), this); } - - iterator - end() _GLIBCXX_NOEXCEPT - { return iterator(_Base::end(), this); } - - const_iterator - end() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::end(), this); } - -#if __cplusplus >= 201103L - const_iterator - cbegin() const noexcept - { return const_iterator(_Base::cbegin(), this); } - - const_iterator - cend() const noexcept - { return const_iterator(_Base::cend(), this); } -#endif - - reverse_iterator - rbegin() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return reverse_iterator(end()); - } - - const_reverse_iterator - rbegin() const _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(end()); - } - - reverse_iterator - rend() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return reverse_iterator(begin()); - } - - const_reverse_iterator - rend() const _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(begin()); - } - -#if __cplusplus >= 201103L - const_reverse_iterator - crbegin() const noexcept - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(cend()); - } - - const_reverse_iterator - crend() const noexcept - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(cbegin()); - } -#endif - - void - swap(multiset& __x) - _GLIBCXX_NOEXCEPT_IF( noexcept(declval<_Base&>().swap(__x)) ) - { - _Base::swap(__x); - this->_M_swap(__x); - } - - // modifiers: -#if __cplusplus >= 201103L - template<typename... _Args> - iterator - emplace(_Args&&... __args) - { - // The cost is the same whether or not the element is inserted so we - // always report insertion of 1 element. - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::emplace(std::forward<_Args>(__args)...), this); - } - - template<typename... _Args> - iterator - emplace_hint(const_iterator __pos, _Args&&... __args) - { - auto size_before = this->size(); - auto __res - = _Base::emplace_hint(__pos.base(), std::forward<_Args>(__args)...); - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } -#endif - - iterator - insert(const value_type& __x) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::insert(__x), this); - } - -#if __cplusplus >= 201103L - iterator - insert(value_type&& __x) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::insert(std::move(__x)), this); - } -#endif - - iterator - insert(const_iterator __pos, const value_type& __x) - { - size_type size_before = this->size(); - _Base_iterator __res = _Base::insert(__pos.base(), __x); - - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } - -#if __cplusplus >= 201103L - iterator - insert(const_iterator __pos, value_type&& __x) - { - auto size_before = this->size(); - auto __res = _Base::insert(__pos.base(), std::move(__x)); - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } -#endif - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> -#else - template<typename _InputIterator> -#endif - void - insert(_InputIterator __first, _InputIterator __last) - { - for (; __first != __last; ++__first) - insert(*__first); - } - -#if __cplusplus >= 201103L - void - insert(initializer_list<value_type> __l) - { insert(__l.begin(), __l.end()); } -#endif - -#if __cplusplus >= 201103L - iterator - erase(const_iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::erase(__pos.base()), this); - } -#else - void - erase(iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - _Base::erase(__pos.base()); - } -#endif - - size_type - erase(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return _Base::erase(__x); - } - -#if __cplusplus >= 201103L - iterator - erase(const_iterator __first, const_iterator __last) - { - if (__first != __last) - { - iterator __ret; - for (; __first != __last;) - __ret = erase(__first++); - return __ret; - } - else - return iterator(_Base::erase(__first.base(), __last.base()), this); - } -#else - void - erase(iterator __first, iterator __last) - { - for (; __first != __last;) - erase(__first++); - } -#endif - - void - clear() _GLIBCXX_NOEXCEPT - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - size_type - count(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::count(__x); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - size_type - count(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::count(__x); - } -#endif - - // multiset operations: - iterator - find(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return iterator(_Base::find(__x), this); - } - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 214. set::find() missing const overload - const_iterator - find(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return const_iterator(_Base::find(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - find(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return { _Base::find(__x), this }; - } - - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - find(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return { _Base::find(__x), this }; - } -#endif - - iterator - lower_bound(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return iterator(_Base::lower_bound(__x), this); - } - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 214. set::find() missing const overload - const_iterator - lower_bound(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_iterator(_Base::lower_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - lower_bound(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::lower_bound(__x), this }; - } - - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - lower_bound(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::lower_bound(__x), this }; - } -#endif - - iterator - upper_bound(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return iterator(_Base::upper_bound(__x), this); - } - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 214. set::find() missing const overload - const_iterator - upper_bound(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_iterator(_Base::upper_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - upper_bound(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::upper_bound(__x), this }; - } - - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - upper_bound(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::upper_bound(__x), this }; - } -#endif - - std::pair<iterator,iterator> - equal_range(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - std::pair<_Base_iterator, _Base_iterator> __base_ret - = _Base::equal_range(__x); - return std::make_pair(iterator(__base_ret.first, this), - iterator(__base_ret.second, this)); - } - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 214. set::find() missing const overload - std::pair<const_iterator,const_iterator> - equal_range(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - std::pair<_Base_const_iterator, _Base_const_iterator> __base_ret - = _Base::equal_range(__x); - return std::make_pair(const_iterator(__base_ret.first, this), - const_iterator(__base_ret.second, this)); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - std::pair<iterator, iterator> - equal_range(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - auto __res = _Base::equal_range(__x); - return { { __res.first, this }, { __res.second, this } }; - } - - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - std::pair<const_iterator, const_iterator> - equal_range(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - auto __res = _Base::equal_range(__x); - return { { __res.first, this }, { __res.second, this } }; - } -#endif - - _Base& - _M_base() _GLIBCXX_NOEXCEPT { return *this; } - - const _Base& - _M_base() const _GLIBCXX_NOEXCEPT { return *this; } - - private: - /** If hint is used we consider that the map and unordered_map - * operations have equivalent insertion cost so we do not update metrics - * about it. - * Note that to find out if hint has been used is libstdc++ - * implementation dependent. - */ - bool - _M_hint_used(_Base_const_iterator __hint, _Base_iterator __res) - { - return (__hint == __res - || (__hint == _M_base().end() && ++__res == _M_base().end()) - || (__hint != _M_base().end() && (++__hint == __res - || ++__res == --__hint))); - } - - template<typename _K1, typename _C1, typename _A1> - friend bool - operator==(const multiset<_K1, _C1, _A1>&, - const multiset<_K1, _C1, _A1>&); - - template<typename _K1, typename _C1, typename _A1> - friend bool - operator< (const multiset<_K1, _C1, _A1>&, - const multiset<_K1, _C1, _A1>&); - }; - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator==(const multiset<_Key, _Compare, _Allocator>& __lhs, - const multiset<_Key, _Compare, _Allocator>& __rhs) - { - __profcxx_map2umap_invalidate(__lhs._M_map2umap_info); - __profcxx_map2umap_invalidate(__rhs._M_map2umap_info); - return __lhs._M_base() == __rhs._M_base(); - } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator<(const multiset<_Key, _Compare, _Allocator>& __lhs, - const multiset<_Key, _Compare, _Allocator>& __rhs) - { - __profcxx_map2umap_invalidate(__lhs._M_map2umap_info); - __profcxx_map2umap_invalidate(__rhs._M_map2umap_info); - return __lhs._M_base() < __rhs._M_base(); - } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator!=(const multiset<_Key, _Compare, _Allocator>& __lhs, - const multiset<_Key, _Compare, _Allocator>& __rhs) - { return !(__lhs == __rhs); } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator<=(const multiset<_Key, _Compare, _Allocator>& __lhs, - const multiset<_Key, _Compare, _Allocator>& __rhs) - { return !(__rhs < __lhs); } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator>=(const multiset<_Key, _Compare, _Allocator>& __lhs, - const multiset<_Key, _Compare, _Allocator>& __rhs) - { return !(__lhs < __rhs); } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator>(const multiset<_Key, _Compare, _Allocator>& __lhs, - const multiset<_Key, _Compare, _Allocator>& __rhs) - { return __rhs < __lhs; } - - template<typename _Key, typename _Compare, typename _Allocator> - void - swap(multiset<_Key, _Compare, _Allocator>& __x, - multiset<_Key, _Compare, _Allocator>& __y) - _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y))) - { return __x.swap(__y); } - -} // namespace __profile -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/ordered_base.h b/libstdc++-v3/include/profile/ordered_base.h deleted file mode 100644 index ceee4553cff..00000000000 --- a/libstdc++-v3/include/profile/ordered_base.h +++ /dev/null @@ -1,100 +0,0 @@ -// Profiling unordered containers implementation details -*- C++ -*- - -// Copyright (C) 2014-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/ordered_base.h - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_ORDERED -#define _GLIBCXX_PROFILE_ORDERED 1 - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - template<typename _Cont> - class _Ordered_profile - { - public: - void - _M_profile_iterate(int __rewind = 0) const - { __profcxx_map2umap_iterate(this->_M_map2umap_info, __rewind); } - - protected: - _Ordered_profile() _GLIBCXX_NOEXCEPT - { _M_profile_construct(); } - -#if __cplusplus >= 201103L - _Ordered_profile(const _Ordered_profile&) noexcept - : _Ordered_profile() { } - _Ordered_profile(_Ordered_profile&& __other) noexcept - : _Ordered_profile() - { _M_swap(__other); } - - _Ordered_profile& - operator=(const _Ordered_profile&) noexcept - { - _M_profile_destruct(); - _M_profile_construct(); - } - - _Ordered_profile& - operator=(_Ordered_profile&& __other) noexcept - { - _M_swap(__other); - - __other._M_profile_destruct(); - __other._M_profile_construct(); - } -#endif - - ~_Ordered_profile() - { _M_profile_destruct(); } - - void - _M_profile_construct() _GLIBCXX_NOEXCEPT - { _M_map2umap_info = __profcxx_map2umap_construct(); } - - void - _M_profile_destruct() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_destruct(_M_map2umap_info); - _M_map2umap_info = 0; - } - - void - _M_swap(_Ordered_profile& __other) - { std::swap(_M_map2umap_info, __other._M_map2umap_info); } - - __gnu_profile::__map2umap_info* _M_map2umap_info; - - private: - _Cont& - _M_conjure() - { return *static_cast<_Cont*>(this); } - }; - -} // namespace __profile -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/set b/libstdc++-v3/include/profile/set deleted file mode 100644 index 14fc9ddd242..00000000000 --- a/libstdc++-v3/include/profile/set +++ /dev/null @@ -1,35 +0,0 @@ -// Profiling set/multiset implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/set - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_SET -#define _GLIBCXX_PROFILE_SET 1 - -#include <set> -#include <profile/set.h> -#include <profile/multiset.h> - -#endif diff --git a/libstdc++-v3/include/profile/set.h b/libstdc++-v3/include/profile/set.h deleted file mode 100644 index 18f9c7440c4..00000000000 --- a/libstdc++-v3/include/profile/set.h +++ /dev/null @@ -1,628 +0,0 @@ -// Profiling set implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file profile/set.h - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_SET_H -#define _GLIBCXX_PROFILE_SET_H 1 - -#include <profile/base.h> -#include <profile/ordered_base.h> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /// Class std::set wrapper with performance instrumentation. - template<typename _Key, typename _Compare = std::less<_Key>, - typename _Allocator = std::allocator<_Key> > - class set - : public _GLIBCXX_STD_C::set<_Key,_Compare,_Allocator>, - public _Ordered_profile<set<_Key, _Compare, _Allocator> > - { - typedef _GLIBCXX_STD_C::set<_Key, _Compare, _Allocator> _Base; - - typedef typename _Base::iterator _Base_iterator; - typedef typename _Base::const_iterator _Base_const_iterator; - - public: - // types: - typedef _Key key_type; - typedef _Key value_type; - typedef _Compare key_compare; - typedef _Compare value_compare; - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef __iterator_tracker<_Base_iterator, set> iterator; - typedef __iterator_tracker<_Base_const_iterator, - set> const_iterator; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - - typedef typename _Base::size_type size_type; - typedef typename _Base::difference_type difference_type; - - // 23.3.3.1 construct/copy/destroy: -#if __cplusplus < 201103L - set() - : _Base() { } - set(const set& __x) - : _Base(__x) { } - ~set() { } -#else - set() = default; - set(const set&) = default; - set(set&&) = default; - ~set() = default; -#endif - - explicit set(const _Compare& __comp, - const _Allocator& __a = _Allocator()) - : _Base(__comp, __a) { } - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> -#else - template<typename _InputIterator> -#endif - set(_InputIterator __first, _InputIterator __last, - const _Compare& __comp = _Compare(), - const _Allocator& __a = _Allocator()) - : _Base(__first, __last, __comp, __a) { } - -#if __cplusplus >= 201103L - set(initializer_list<value_type> __l, - const _Compare& __comp = _Compare(), - const _Allocator& __a = _Allocator()) - : _Base(__l, __comp, __a) { } - - explicit - set(const _Allocator& __a) - : _Base(__a) { } - - set(const set& __x, const _Allocator& __a) - : _Base(__x, __a) { } - - set(set&& __x, const _Allocator& __a) - noexcept( noexcept(_Base(std::move(__x), __a)) ) - : _Base(std::move(__x), __a) { } - - set(initializer_list<value_type> __l, const _Allocator& __a) - : _Base(__l, __a) { } - - template<typename _InputIterator> - set(_InputIterator __first, _InputIterator __last, - const _Allocator& __a) - : _Base(__first, __last, __a) { } -#endif - - set(const _Base& __x) - : _Base(__x) { } - -#if __cplusplus < 201103L - set& - operator=(const set& __x) - { - this->_M_profile_destruct(); - _M_base() = __x; - this->_M_profile_construct(); - return *this; - } -#else - set& - operator=(const set&) = default; - - set& - operator=(set&&) = default; - - set& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } -#endif - - // iterators - iterator - begin() _GLIBCXX_NOEXCEPT - { return iterator(_Base::begin(), this); } - - const_iterator - begin() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::begin(), this); } - - iterator - end() _GLIBCXX_NOEXCEPT - { return iterator(_Base::end(), this); } - - const_iterator - end() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::end(), this); } - -#if __cplusplus >= 201103L - const_iterator - cbegin() const noexcept - { return const_iterator(_Base::cbegin(), this); } - - const_iterator - cend() const noexcept - { return const_iterator(_Base::cend(), this); } -#endif - - reverse_iterator - rbegin() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return reverse_iterator(end()); - } - - const_reverse_iterator - rbegin() const _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(end()); - } - - reverse_iterator - rend() _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return reverse_iterator(begin()); - } - - const_reverse_iterator - rend() const _GLIBCXX_NOEXCEPT - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(begin()); - } - -#if __cplusplus >= 201103L - const_reverse_iterator - crbegin() const noexcept - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(cend()); - } - - const_reverse_iterator - crend() const noexcept - { - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_reverse_iterator(cbegin()); - } -#endif - - void - swap(set& __x) - _GLIBCXX_NOEXCEPT_IF( noexcept(declval<_Base&>().swap(__x)) ) - { - _Base::swap(__x); - this->_M_swap(__x); - } - - // modifiers: -#if __cplusplus >= 201103L - template<typename... _Args> - std::pair<iterator, bool> - emplace(_Args&&... __args) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - auto __base_ret = _Base::emplace(std::forward<_Args>(__args)...); - return std::make_pair(iterator(__base_ret.first, this), - __base_ret.second); - } - - template<typename... _Args> - iterator - emplace_hint(const_iterator __pos, _Args&&... __args) - { - auto size_before = this->size(); - auto __res - = _Base::emplace_hint(__pos.base(), std::forward<_Args>(__args)...); - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } -#endif - - std::pair<iterator, bool> - insert(const value_type& __x) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - std::pair<_Base_iterator, bool> __base_ret = _Base::insert(__x); - return std::make_pair(iterator(__base_ret.first, this), - __base_ret.second); - } - -#if __cplusplus >= 201103L - std::pair<iterator, bool> - insert(value_type&& __x) - { - __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1); - std::pair<_Base_iterator, bool> __base_ret - = _Base::insert(std::move(__x)); - return std::make_pair(iterator(__base_ret.first, this), - __base_ret.second); - } -#endif - - iterator - insert(const_iterator __pos, const value_type& __x) - { - size_type size_before = this->size(); - _Base_iterator __res = _Base::insert(__pos.base(), __x); - __profcxx_map2umap_insert(this->_M_map2umap_info, - size_before, _M_hint_used(__pos.base(), __res) ? 0 : 1); - return iterator(__res, this); - } - -#if __cplusplus >= 201103L - iterator - insert(const_iterator __pos, value_type&& __x) - { return iterator(_Base::insert(__pos.base(), std::move(__x)), this); } -#endif - - template<typename _InputIterator> - void - insert(_InputIterator __first, _InputIterator __last) - { - for (; __first != __last; ++__first) - insert(*__first); - } - -#if __cplusplus >= 201103L - void - insert(initializer_list<value_type> __l) - { insert(__l.begin(), __l.end()); } -#endif - -#if __cplusplus >= 201103L - iterator - erase(const_iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return iterator(_Base::erase(__pos.base()), this); - } -#else - void - erase(iterator __pos) - { - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - _Base::erase(__pos.base()); - } -#endif - - size_type - erase(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1); - return _Base::erase(__x); - } - -#if __cplusplus >= 201103L - iterator - erase(const_iterator __first, const_iterator __last) - { - if (__first != __last) - { - iterator __ret; - for (; __first != __last;) - __ret = erase(__first++); - return __ret; - } - - return iterator(_Base::erase(__first.base(), __last.base()), this); - } -#else - void - erase(iterator __first, iterator __last) - { - for (; __first != __last;) - erase(__first++); - } -#endif - - void - clear() _GLIBCXX_NOEXCEPT - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - size_type - count(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::count(__x); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - size_type - count(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return _Base::count(__x); - } -#endif - - // set operations: - iterator - find(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return iterator(_Base::find(__x), this); - } - - const_iterator - find(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return const_iterator(_Base::find(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - find(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return { _Base::find(__x), this }; - } - - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - find(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - return { _Base::find(__x), this }; - } -#endif - - iterator - lower_bound(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return iterator(_Base::lower_bound(__x), this); - } - - const_iterator - lower_bound(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_iterator(_Base::lower_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - lower_bound(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::lower_bound(__x), this }; - } - - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - lower_bound(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::lower_bound(__x), this }; - } -#endif - - iterator - upper_bound(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return iterator(_Base::upper_bound(__x), this); - } - - const_iterator - upper_bound(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return const_iterator(_Base::upper_bound(__x), this); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - iterator - upper_bound(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::upper_bound(__x), this }; - } - - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - const_iterator - upper_bound(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - __profcxx_map2umap_invalidate(this->_M_map2umap_info); - return { _Base::upper_bound(__x), this }; - } -#endif - - std::pair<iterator, iterator> - equal_range(const key_type& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - std::pair<_Base_iterator, _Base_iterator> __base_ret - = _Base::equal_range(__x); - return std::make_pair(iterator(__base_ret.first, this), - iterator(__base_ret.second, this)); - } - - std::pair<const_iterator, const_iterator> - equal_range(const key_type& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - std::pair<_Base_const_iterator, _Base_const_iterator> __base_ret - = _Base::equal_range(__x); - return std::make_pair(const_iterator(__base_ret.first, this), - const_iterator(__base_ret.second, this)); - } - -#if __cplusplus > 201103L - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - std::pair<iterator, iterator> - equal_range(const _Kt& __x) - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - auto __res = _Base::equal_range(__x); - return { { __res.first, this }, { __res.second, this } }; - } - - template<typename _Kt, - typename _Req = - typename __has_is_transparent<_Compare, _Kt>::type> - std::pair<const_iterator, const_iterator> - equal_range(const _Kt& __x) const - { - __profcxx_map2umap_find(this->_M_map2umap_info, this->size()); - auto __res = _Base::equal_range(__x); - return { { __res.first, this }, { __res.second, this } }; - } -#endif - - _Base& - _M_base() _GLIBCXX_NOEXCEPT { return *this; } - - const _Base& - _M_base() const _GLIBCXX_NOEXCEPT { return *this; } - - private: - /** If hint is used we consider that the map and unordered_map - * operations have equivalent insertion cost so we do not update metrics - * about it. - * Note that to find out if hint has been used is libstdc++ - * implementation dependent. - */ - bool - _M_hint_used(_Base_const_iterator __hint, _Base_iterator __res) - { - return (__hint == __res - || (__hint == _M_base().end() && ++__res == _M_base().end()) - || (__hint != _M_base().end() && (++__hint == __res - || ++__res == --__hint))); - } - - template<typename _K1, typename _C1, typename _A1> - friend bool - operator==(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); - - template<typename _K1, typename _C1, typename _A1> - friend bool - operator<(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); - }; - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator==(const set<_Key, _Compare, _Allocator>& __lhs, - const set<_Key, _Compare, _Allocator>& __rhs) - { - __profcxx_map2umap_invalidate(__lhs._M_map2umap_info); - __profcxx_map2umap_invalidate(__rhs._M_map2umap_info); - return __lhs._M_base() == __rhs._M_base(); - } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator<(const set<_Key, _Compare, _Allocator>& __lhs, - const set<_Key, _Compare, _Allocator>& __rhs) - { - __profcxx_map2umap_invalidate(__lhs._M_map2umap_info); - __profcxx_map2umap_invalidate(__rhs._M_map2umap_info); - return __lhs._M_base() < __rhs._M_base(); - } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator!=(const set<_Key, _Compare, _Allocator>& __lhs, - const set<_Key, _Compare, _Allocator>& __rhs) - { return !(__lhs == __rhs); } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator<=(const set<_Key, _Compare, _Allocator>& __lhs, - const set<_Key, _Compare, _Allocator>& __rhs) - { return !(__rhs < __lhs); } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator>=(const set<_Key, _Compare, _Allocator>& __lhs, - const set<_Key, _Compare, _Allocator>& __rhs) - { return !(__lhs < __rhs); } - - template<typename _Key, typename _Compare, typename _Allocator> - inline bool - operator>(const set<_Key, _Compare, _Allocator>& __lhs, - const set<_Key, _Compare, _Allocator>& __rhs) - { return __rhs < __lhs; } - - template<typename _Key, typename _Compare, typename _Allocator> - void - swap(set<_Key, _Compare, _Allocator>& __x, - set<_Key, _Compare, _Allocator>& __y) - _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y))) - { return __x.swap(__y); } - -} // namespace __profile -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/unordered_base.h b/libstdc++-v3/include/profile/unordered_base.h deleted file mode 100644 index 200f4e047fe..00000000000 --- a/libstdc++-v3/include/profile/unordered_base.h +++ /dev/null @@ -1,308 +0,0 @@ -// Profiling unordered containers implementation details -*- C++ -*- - -// Copyright (C) 2013-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/unordered_base.h - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_UNORDERED -#define _GLIBCXX_PROFILE_UNORDERED 1 - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - template<typename _UnorderedCont, - typename _Value, bool _Cache_hash_code> - struct _Bucket_index_helper; - - template<typename _UnorderedCont, typename _Value> - struct _Bucket_index_helper<_UnorderedCont, _Value, true> - { - static std::size_t - bucket(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, true>* __node) - { return __node->_M_hash_code % __uc.bucket_count(); } - }; - - template<typename _UnorderedCont, typename _Value> - struct _Bucket_index_helper<_UnorderedCont, _Value, false> - { - static std::size_t - bucket(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, false>* __node) - { return __uc.bucket(__node->_M_v()); } - }; - - template<typename _UnorderedCont, typename _Key, typename _Mapped> - struct _Bucket_index_helper<_UnorderedCont, - std::pair<const _Key, _Mapped>, false> - { - typedef std::pair<const _Key, _Mapped> _Value; - - static std::size_t - bucket(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, false>* __node) - { return __uc.bucket(__node->_M_v().first); } - }; - - template<typename _UnorderedCont, typename _Value, bool _Cache_hash_code> - std::size_t - __get_bucket_index(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, _Cache_hash_code>* __node) - { - using __bucket_index_helper - = _Bucket_index_helper<_UnorderedCont, _Value, _Cache_hash_code>; - return __bucket_index_helper::bucket(__uc, __node); - } - - template<typename _UnorderedCont, - typename _Value, bool _Cache_hash_code> - struct _Equal_helper; - - template<typename _UnorderedCont, typename _Value> - struct _Equal_helper<_UnorderedCont, _Value, true> - { - static std::size_t - are_equal(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, true>* __lhs, - const __detail::_Hash_node<_Value, true>* __rhs) - { - return __lhs->_M_hash_code == __rhs->_M_hash_code - && __uc.key_eq()(__lhs->_M_v(), __rhs->_M_v()); - } - }; - - template<typename _UnorderedCont, - typename _Value> - struct _Equal_helper<_UnorderedCont, _Value, false> - { - static std::size_t - are_equal(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, false>* __lhs, - const __detail::_Hash_node<_Value, false>* __rhs) - { return __uc.key_eq()(__lhs->_M_v(), __rhs->_M_v()); } - }; - - template<typename _UnorderedCont, - typename _Key, typename _Mapped> - struct _Equal_helper<_UnorderedCont, std::pair<const _Key, _Mapped>, true> - { - typedef std::pair<const _Key, _Mapped> _Value; - - static std::size_t - are_equal(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, true>* __lhs, - const __detail::_Hash_node<_Value, true>* __rhs) - { - return __lhs->_M_hash_code == __rhs->_M_hash_code - && __uc.key_eq()(__lhs->_M_v().first, __rhs->_M_v().first); - } - }; - - template<typename _UnorderedCont, - typename _Key, typename _Mapped> - struct _Equal_helper<_UnorderedCont, std::pair<const _Key, _Mapped>, false> - { - typedef std::pair<const _Key, _Mapped> _Value; - - static std::size_t - are_equal(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, false>* __lhs, - const __detail::_Hash_node<_Value, false>* __rhs) - { return __uc.key_eq()(__lhs->_M_v().first, __rhs->_M_v().first); } - }; - - template<typename _UnorderedCont, typename _Value, bool _Cache_hash_code> - bool - __are_equal(const _UnorderedCont& __uc, - const __detail::_Hash_node<_Value, _Cache_hash_code>* __lhs, - const __detail::_Hash_node<_Value, _Cache_hash_code>* __rhs) - { - using __equal_helper - = _Equal_helper<_UnorderedCont, _Value, _Cache_hash_code>; - return __equal_helper::are_equal(__uc, __lhs, __rhs); - } - - template<typename _UnorderedCont, bool _Unique_keys> - class _Unordered_profile - { - _UnorderedCont& - _M_conjure() - { return *(static_cast<_UnorderedCont*>(this)); } - - using __unique_keys = std::integral_constant<bool, _Unique_keys>; - - protected: - _Unordered_profile() noexcept - { _M_profile_construct(); } - - _Unordered_profile(const _Unordered_profile&) noexcept - : _Unordered_profile() { } - - _Unordered_profile(_Unordered_profile&& __other) noexcept - : _Unordered_profile() - { _M_swap(__other); } - - ~_Unordered_profile() - { _M_profile_destruct(); } - - _Unordered_profile& - operator=(const _Unordered_profile&) noexcept - { - // Assignment just reset profiling. - _M_profile_destruct(); - _M_profile_construct(); - } - - _Unordered_profile& - operator=(_Unordered_profile&& __other) noexcept - { - // Take profiling of the moved instance... - _M_swap(__other); - - // ...and then reset other instance profiling. - __other._M_profile_destruct(); - __other._M_profile_construct(); - } - - void - _M_profile_construct() noexcept - { - auto& __uc = _M_conjure(); - _M_size_info = __profcxx_hashtable_size_construct(__uc.bucket_count()); - _M_hashfunc_info = __profcxx_hash_func_construct(); - } - - void - _M_profile_destruct() noexcept - { - auto& __uc = _M_conjure(); - __profcxx_hashtable_size_destruct(_M_size_info, - __uc.bucket_count(), __uc.size()); - _M_size_info = 0; - - if (!_M_hashfunc_info) - return; - - _M_profile_destruct(__unique_keys()); - _M_hashfunc_info = 0; - } - - void - _M_swap(_Unordered_profile& __other) noexcept - { - std::swap(_M_size_info, __other._M_size_info); - std::swap(_M_hashfunc_info, __other._M_hashfunc_info); - } - - void - _M_profile_resize(std::size_t __old_size) - { - auto __new_size = _M_conjure().bucket_count(); - if (__old_size != __new_size) - __profcxx_hashtable_size_resize(_M_size_info, __old_size, __new_size); - } - - __gnu_profile::__container_size_info* _M_size_info; - __gnu_profile::__hashfunc_info* _M_hashfunc_info; - - private: - void - _M_profile_destruct(std::true_type); - - void - _M_profile_destruct(std::false_type); - }; - - template<typename _UnorderedCont, bool _Unique_keys> - void - _Unordered_profile<_UnorderedCont, _Unique_keys>:: - _M_profile_destruct(std::true_type) - { - auto& __uc = _M_conjure(); - std::size_t __hops = 0, __lc = 0, __chain = 0; - auto __it = __uc.begin(); - while (__it != __uc.end()) - { - auto __bkt = __get_bucket_index(__uc, __it._M_cur); - auto __lit = __uc.begin(__bkt); - auto __lend = __uc.end(__bkt); - for (++__it, ++__lit; __lit != __lend; ++__it, ++__lit) - ++__chain; - - if (__chain) - { - ++__chain; - __lc = __lc > __chain ? __lc : __chain; - __hops += __chain * (__chain - 1) / 2; - __chain = 0; - } - } - - __profcxx_hash_func_destruct(_M_hashfunc_info, - __lc, __uc.size(), __hops); - } - - template<typename _UnorderedCont, bool _Unique_keys> - void - _Unordered_profile<_UnorderedCont, _Unique_keys>:: - _M_profile_destruct(std::false_type) - { - auto& __uc = _M_conjure(); - std::size_t __hops = 0, __lc = 0, __chain = 0, __unique_size = 0; - auto __it = __uc.begin(); - while (__it != __uc.end()) - { - auto __bkt = __get_bucket_index(__uc, __it._M_cur); - auto __lit = __uc.begin(__bkt); - auto __lend = __uc.end(__bkt); - auto __pit = __it; - ++__unique_size; - for (++__it, ++__lit; __lit != __lend; ++__it, ++__lit) - { - if (!__are_equal(__uc, __pit._M_cur, __it._M_cur)) - { - ++__chain; - ++__unique_size; - __pit = __it; - } - } - - if (__chain) - { - ++__chain; - __lc = __lc > __chain ? __lc : __chain; - __hops += __chain * (__chain - 1) / 2; - __chain = 0; - } - } - - __profcxx_hash_func_destruct(_M_hashfunc_info, - __lc, __unique_size, __hops); - } - -} // namespace __profile -} // namespace std - -#endif diff --git a/libstdc++-v3/include/profile/unordered_map b/libstdc++-v3/include/profile/unordered_map deleted file mode 100644 index 0e54915a066..00000000000 --- a/libstdc++-v3/include/profile/unordered_map +++ /dev/null @@ -1,586 +0,0 @@ -// Profiling unordered_map/unordered_multimap implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/unordered_map - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_UNORDERED_MAP -#define _GLIBCXX_PROFILE_UNORDERED_MAP 1 - -#if __cplusplus < 201103L -# include <bits/c++0x_warning.h> -#else -# include <unordered_map> - -#include <profile/base.h> -#include <profile/unordered_base.h> - -#define _GLIBCXX_BASE unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc> -#define _GLIBCXX_STD_BASE _GLIBCXX_STD_C::_GLIBCXX_BASE - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /// Class std::unordered_map wrapper with performance instrumentation. - template<typename _Key, typename _Tp, - typename _Hash = std::hash<_Key>, - typename _Pred = std::equal_to<_Key>, - typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > > - class unordered_map - : public _GLIBCXX_STD_BASE, - public _Unordered_profile<unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>, - true> - { - typedef typename _GLIBCXX_STD_BASE _Base; - - _Base& - _M_base() noexcept { return *this; } - - const _Base& - _M_base() const noexcept { return *this; } - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::hasher hasher; - typedef typename _Base::key_equal key_equal; - typedef typename _Base::allocator_type allocator_type; - typedef typename _Base::key_type key_type; - typedef typename _Base::value_type value_type; - typedef typename _Base::difference_type difference_type; - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - typedef typename _Base::mapped_type mapped_type; - - typedef typename _Base::iterator iterator; - typedef typename _Base::const_iterator const_iterator; - - unordered_map() = default; - - explicit - unordered_map(size_type __n, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__n, __hf, __eql, __a) { } - - template<typename _InputIterator> - unordered_map(_InputIterator __f, _InputIterator __l, - size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__f, __l, __n, __hf, __eql, __a) { } - - unordered_map(const unordered_map&) = default; - - unordered_map(const _Base& __x) - : _Base(__x) { } - - unordered_map(unordered_map&&) = default; - - explicit - unordered_map(const allocator_type& __a) - : _Base(__a) { } - - unordered_map(const unordered_map& __umap, - const allocator_type& __a) - : _Base(__umap, __a) { } - - unordered_map(unordered_map&& __umap, - const allocator_type& __a) - : _Base(std::move(__umap._M_base()), __a) { } - - unordered_map(initializer_list<value_type> __l, - size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__l, __n, __hf, __eql, __a) { } - - unordered_map(size_type __n, const allocator_type& __a) - : unordered_map(__n, hasher(), key_equal(), __a) - { } - - unordered_map(size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_map(__n, __hf, key_equal(), __a) - { } - - template<typename _InputIterator> - unordered_map(_InputIterator __first, _InputIterator __last, - size_type __n, - const allocator_type& __a) - : unordered_map(__first, __last, __n, hasher(), key_equal(), __a) - { } - - template<typename _InputIterator> - unordered_map(_InputIterator __first, _InputIterator __last, - size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_map(__first, __last, __n, __hf, key_equal(), __a) - { } - - unordered_map(initializer_list<value_type> __l, - size_type __n, - const allocator_type& __a) - : unordered_map(__l, __n, hasher(), key_equal(), __a) - { } - - unordered_map(initializer_list<value_type> __l, - size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_map(__l, __n, __hf, key_equal(), __a) - { } - - unordered_map& - operator=(const unordered_map&) = default; - - unordered_map& - operator=(unordered_map&&) = default; - - unordered_map& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } - - void - clear() noexcept - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - template<typename... _Args> - std::pair<iterator, bool> - emplace(_Args&&... __args) - { - size_type __old_size = _Base::bucket_count(); - std::pair<iterator, bool> __res - = _Base::emplace(std::forward<_Args>(__args)...); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename... _Args> - iterator - emplace_hint(const_iterator __it, _Args&&... __args) - { - size_type __old_size = _Base::bucket_count(); - iterator __res - = _Base::emplace_hint(__it, std::forward<_Args>(__args)...); - this->_M_profile_resize(__old_size); - return __res; - } - - void - insert(std::initializer_list<value_type> __l) - { - size_type __old_size = _Base::bucket_count(); - _Base::insert(__l); - this->_M_profile_resize(__old_size); - } - - std::pair<iterator, bool> - insert(const value_type& __obj) - { - size_type __old_size = _Base::bucket_count(); - std::pair<iterator, bool> __res = _Base::insert(__obj); - this->_M_profile_resize(__old_size); - return __res; - } - - iterator - insert(const_iterator __iter, const value_type& __v) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__iter, __v); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename _Pair, typename = typename - std::enable_if<std::is_constructible<value_type, - _Pair&&>::value>::type> - std::pair<iterator, bool> - insert(_Pair&& __obj) - { - size_type __old_size = _Base::bucket_count(); - std::pair<iterator, bool> __res - = _Base::insert(std::forward<_Pair>(__obj)); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename _Pair, typename = typename - std::enable_if<std::is_constructible<value_type, - _Pair&&>::value>::type> - iterator - insert(const_iterator __iter, _Pair&& __v) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__iter, std::forward<_Pair>(__v)); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename _InputIter> - void - insert(_InputIter __first, _InputIter __last) - { - size_type __old_size = _Base::bucket_count(); - _Base::insert(__first, __last); - this->_M_profile_resize(__old_size); - } - - // operator[] - mapped_type& - operator[](const _Key& __k) - { - size_type __old_size = _Base::bucket_count(); - mapped_type& __res = _M_base()[__k]; - this->_M_profile_resize(__old_size); - return __res; - } - - mapped_type& - operator[](_Key&& __k) - { - size_type __old_size = _Base::bucket_count(); - mapped_type& __res = _M_base()[std::move(__k)]; - this->_M_profile_resize(__old_size); - return __res; - } - - void - swap(unordered_map& __x) - noexcept( noexcept(__x._M_base().swap(__x)) ) - { - _Base::swap(__x._M_base()); - this->_M_swap(__x); - } - - void rehash(size_type __n) - { - size_type __old_size = _Base::bucket_count(); - _Base::rehash(__n); - this->_M_profile_resize(__old_size); - } - }; - - template<typename _Key, typename _Tp, typename _Hash, - typename _Pred, typename _Alloc> - inline void - swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, - unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - - template<typename _Key, typename _Tp, typename _Hash, - typename _Pred, typename _Alloc> - inline bool - operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, - const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) - { return static_cast<const _GLIBCXX_STD_BASE&>(__x) == __y; } - - template<typename _Key, typename _Tp, typename _Hash, - typename _Pred, typename _Alloc> - inline bool - operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, - const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) - { return !(__x == __y); } - -#undef _GLIBCXX_BASE -#undef _GLIBCXX_STD_BASE -#define _GLIBCXX_BASE unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc> -#define _GLIBCXX_STD_BASE _GLIBCXX_STD_C::_GLIBCXX_BASE - - /// Class std::unordered_multimap wrapper with performance instrumentation. - template<typename _Key, typename _Tp, - typename _Hash = std::hash<_Key>, - typename _Pred = std::equal_to<_Key>, - typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > > - class unordered_multimap - : public _GLIBCXX_STD_BASE, - public _Unordered_profile<unordered_multimap<_Key, _Tp, - _Hash, _Pred, _Alloc>, - false> - { - typedef typename _GLIBCXX_STD_BASE _Base; - - _Base& - _M_base() noexcept { return *this; } - - const _Base& - _M_base() const noexcept { return *this; } - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::hasher hasher; - typedef typename _Base::key_equal key_equal; - typedef typename _Base::allocator_type allocator_type; - typedef typename _Base::key_type key_type; - typedef typename _Base::value_type value_type; - typedef typename _Base::difference_type difference_type; - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef typename _Base::iterator iterator; - typedef typename _Base::const_iterator const_iterator; - - unordered_multimap() = default; - - explicit - unordered_multimap(size_type __n, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__n, __hf, __eql, __a) { } - - template<typename _InputIterator> - unordered_multimap(_InputIterator __f, _InputIterator __l, - size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__f, __l, __n, __hf, __eql, __a) { } - - unordered_multimap(const unordered_multimap&) = default; - - unordered_multimap(const _Base& __x) - : _Base(__x) { } - - unordered_multimap(unordered_multimap&&) = default; - - explicit - unordered_multimap(const allocator_type& __a) - : _Base(__a) { } - - unordered_multimap(const unordered_multimap& __ummap, - const allocator_type& __a) - : _Base(__ummap._M_base(), __a) { } - - unordered_multimap(unordered_multimap&& __ummap, - const allocator_type& __a) - : _Base(std::move(__ummap._M_base()), __a) { } - - unordered_multimap(initializer_list<value_type> __l, - size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__l, __n, __hf, __eql, __a) { } - - unordered_multimap(size_type __n, const allocator_type& __a) - : unordered_multimap(__n, hasher(), key_equal(), __a) - { } - - unordered_multimap(size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_multimap(__n, __hf, key_equal(), __a) - { } - - template<typename _InputIterator> - unordered_multimap(_InputIterator __first, _InputIterator __last, - size_type __n, - const allocator_type& __a) - : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a) - { } - - template<typename _InputIterator> - unordered_multimap(_InputIterator __first, _InputIterator __last, - size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a) - { } - - unordered_multimap(initializer_list<value_type> __l, - size_type __n, - const allocator_type& __a) - : unordered_multimap(__l, __n, hasher(), key_equal(), __a) - { } - - unordered_multimap(initializer_list<value_type> __l, - size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_multimap(__l, __n, __hf, key_equal(), __a) - { } - - unordered_multimap& - operator=(const unordered_multimap&) = default; - - unordered_multimap& - operator=(unordered_multimap&&) = default; - - unordered_multimap& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } - - void - clear() noexcept - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - template<typename... _Args> - iterator - emplace(_Args&&... __args) - { - size_type __old_size = _Base::bucket_count(); - iterator __res - = _Base::emplace(std::forward<_Args>(__args)...); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename... _Args> - iterator - emplace_hint(const_iterator __it, _Args&&... __args) - { - size_type __old_size = _Base::bucket_count(); - iterator __res - = _Base::emplace_hint(__it, std::forward<_Args>(__args)...); - this->_M_profile_resize(__old_size); - return __res; - } - - void - insert(std::initializer_list<value_type> __l) - { - size_type __old_size = _Base::bucket_count(); - _Base::insert(__l); - this->_M_profile_resize(__old_size); - } - - iterator - insert(const value_type& __obj) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__obj); - this->_M_profile_resize(__old_size); - return __res; - } - - iterator - insert(const_iterator __iter, const value_type& __v) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__iter, __v); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename _Pair, typename = typename - std::enable_if<std::is_constructible<value_type, - _Pair&&>::value>::type> - iterator - insert(_Pair&& __obj) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(std::forward<_Pair>(__obj)); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename _Pair, typename = typename - std::enable_if<std::is_constructible<value_type, - _Pair&&>::value>::type> - iterator - insert(const_iterator __iter, _Pair&& __v) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__iter, std::forward<_Pair>(__v)); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename _InputIter> - void - insert(_InputIter __first, _InputIter __last) - { - size_type __old_size = _Base::bucket_count(); - _Base::insert(__first, __last); - this->_M_profile_resize(__old_size); - } - - void - swap(unordered_multimap& __x) - noexcept( noexcept(__x._M_base().swap(__x)) ) - { - _Base::swap(__x._M_base()); - this->_M_swap(__x); - } - - void - rehash(size_type __n) - { - size_type __old_size = _Base::bucket_count(); - _Base::rehash(__n); - this->_M_profile_resize(__old_size); - } - }; - - template<typename _Key, typename _Tp, typename _Hash, - typename _Pred, typename _Alloc> - inline void - swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, - unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - - template<typename _Key, typename _Tp, typename _Hash, - typename _Pred, typename _Alloc> - inline bool - operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, - const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) - { return static_cast<const _GLIBCXX_STD_BASE&>(__x) == __y; } - - template<typename _Key, typename _Tp, typename _Hash, - typename _Pred, typename _Alloc> - inline bool - operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, - const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) - { return !(__x == __y); } - -} // namespace __profile -} // namespace std - -#undef _GLIBCXX_BASE -#undef _GLIBCXX_STD_BASE - -#endif // C++11 - -#endif diff --git a/libstdc++-v3/include/profile/unordered_set b/libstdc++-v3/include/profile/unordered_set deleted file mode 100644 index 2e410d07f2b..00000000000 --- a/libstdc++-v3/include/profile/unordered_set +++ /dev/null @@ -1,561 +0,0 @@ -// Profiling unordered_set/unordered_multiset implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/unordered_set - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_UNORDERED_SET -#define _GLIBCXX_PROFILE_UNORDERED_SET 1 - -#if __cplusplus < 201103L -# include <bits/c++0x_warning.h> -#else -# include <unordered_set> - -#include <profile/base.h> -#include <profile/unordered_base.h> - -#define _GLIBCXX_BASE unordered_set<_Key, _Hash, _Pred, _Alloc> -#define _GLIBCXX_STD_BASE _GLIBCXX_STD_C::_GLIBCXX_BASE - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - /** @brief Unordered_set wrapper with performance instrumentation. */ - template<typename _Key, - typename _Hash = std::hash<_Key>, - typename _Pred = std::equal_to<_Key>, - typename _Alloc = std::allocator<_Key> > - class unordered_set - : public _GLIBCXX_STD_BASE, - public _Unordered_profile<unordered_set<_Key, _Hash, _Pred, _Alloc>, - true> - { - typedef _GLIBCXX_STD_BASE _Base; - - _Base& - _M_base() noexcept { return *this; } - - const _Base& - _M_base() const noexcept { return *this; } - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::hasher hasher; - typedef typename _Base::key_equal key_equal; - typedef typename _Base::allocator_type allocator_type; - typedef typename _Base::key_type key_type; - typedef typename _Base::value_type value_type; - typedef typename _Base::difference_type difference_type; - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef typename _Base::iterator iterator; - typedef typename _Base::const_iterator const_iterator; - - unordered_set() = default; - - explicit - unordered_set(size_type __n, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__n, __hf, __eql, __a) - { } - - template<typename _InputIterator> - unordered_set(_InputIterator __f, _InputIterator __l, - size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__f, __l, __n, __hf, __eql, __a) - { } - - unordered_set(const unordered_set&) = default; - - unordered_set(const _Base& __x) - : _Base(__x) - { } - - unordered_set(unordered_set&&) = default; - - explicit - unordered_set(const allocator_type& __a) - : _Base(__a) - { } - - unordered_set(const unordered_set& __uset, - const allocator_type& __a) - : _Base(__uset._M_base(), __a) - { } - - unordered_set(unordered_set&& __uset, - const allocator_type& __a) - : _Base(std::move(__uset._M_base()), __a) - { } - - unordered_set(initializer_list<value_type> __l, - size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__l, __n, __hf, __eql, __a) - { } - - unordered_set(size_type __n, const allocator_type& __a) - : unordered_set(__n, hasher(), key_equal(), __a) - { } - - unordered_set(size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_set(__n, __hf, key_equal(), __a) - { } - - template<typename _InputIterator> - unordered_set(_InputIterator __first, _InputIterator __last, - size_type __n, - const allocator_type& __a) - : unordered_set(__first, __last, __n, hasher(), key_equal(), __a) - { } - - template<typename _InputIterator> - unordered_set(_InputIterator __first, _InputIterator __last, - size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_set(__first, __last, __n, __hf, key_equal(), __a) - { } - - unordered_set(initializer_list<value_type> __l, - size_type __n, - const allocator_type& __a) - : unordered_set(__l, __n, hasher(), key_equal(), __a) - { } - - unordered_set(initializer_list<value_type> __l, - size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_set(__l, __n, __hf, key_equal(), __a) - { } - - unordered_set& - operator=(const unordered_set&) = default; - - unordered_set& - operator=(unordered_set&&) = default; - - unordered_set& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } - - void - swap(unordered_set& __x) - noexcept( noexcept(__x._M_base().swap(__x)) ) - { - _Base::swap(__x); - this->_M_swap(__x); - } - - void - clear() noexcept - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - template<typename... _Args> - std::pair<iterator, bool> - emplace(_Args&&... __args) - { - size_type __old_size = _Base::bucket_count(); - std::pair<iterator, bool> __res - = _Base::emplace(std::forward<_Args>(__args)...); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename... _Args> - iterator - emplace_hint(const_iterator __it, _Args&&... __args) - { - size_type __old_size = _Base::bucket_count(); - iterator __res - = _Base::emplace_hint(__it, std::forward<_Args>(__args)...); - this->_M_profile_resize(__old_size); - return __res; - } - - void - insert(std::initializer_list<value_type> __l) - { - size_type __old_size = _Base::bucket_count(); - _Base::insert(__l); - this->_M_profile_resize(__old_size); - } - - std::pair<iterator, bool> - insert(const value_type& __obj) - { - size_type __old_size = _Base::bucket_count(); - std::pair<iterator, bool> __res = _Base::insert(__obj); - this->_M_profile_resize(__old_size); - return __res; - } - - iterator - insert(const_iterator __iter, const value_type& __v) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__iter, __v); - this->_M_profile_resize(__old_size); - return __res; - } - - std::pair<iterator, bool> - insert(value_type&& __obj) - { - size_type __old_size = _Base::bucket_count(); - std::pair<iterator, bool> __res = _Base::insert(std::move(__obj)); - this->_M_profile_resize(__old_size); - return __res; - } - - iterator - insert(const_iterator __iter, value_type&& __v) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__iter, std::move(__v)); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename _InputIter> - void - insert(_InputIter __first, _InputIter __last) - { - size_type __old_size = _Base::bucket_count(); - _Base::insert(__first, __last); - this->_M_profile_resize(__old_size); - } - - void - rehash(size_type __n) - { - size_type __old_size = _Base::bucket_count(); - _Base::rehash(__n); - this->_M_profile_resize(__old_size); - } - }; - - template<typename _Key, typename _Hash, typename _Pred, typename _Alloc> - inline void - swap(unordered_set<_Key, _Hash, _Pred, _Alloc>& __x, - unordered_set<_Key, _Hash, _Pred, _Alloc>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - - template<typename _Key, typename _Hash, typename _Pred, typename _Alloc> - inline bool - operator==(const unordered_set<_Key, _Hash, _Pred, _Alloc>& __x, - const unordered_set<_Key, _Hash, _Pred, _Alloc>& __y) - { return static_cast<const _GLIBCXX_STD_BASE&>(__x) == __y; } - - template<typename _Key, typename _Hash, typename _Pred, typename _Alloc> - inline bool - operator!=(const unordered_set<_Key, _Hash, _Pred, _Alloc>& __x, - const unordered_set<_Key, _Hash, _Pred, _Alloc>& __y) - { return !(__x == __y); } - -#undef _GLIBCXX_BASE -#undef _GLIBCXX_STD_BASE -#define _GLIBCXX_STD_BASE _GLIBCXX_STD_C::_GLIBCXX_BASE -#define _GLIBCXX_BASE unordered_multiset<_Value, _Hash, _Pred, _Alloc> - - /** @brief Unordered_multiset wrapper with performance instrumentation. */ - template<typename _Value, - typename _Hash = std::hash<_Value>, - typename _Pred = std::equal_to<_Value>, - typename _Alloc = std::allocator<_Value> > - class unordered_multiset - : public _GLIBCXX_STD_BASE, - public _Unordered_profile<unordered_multiset<_Value, - _Hash, _Pred, _Alloc>, - false> - { - typedef _GLIBCXX_STD_BASE _Base; - - _Base& - _M_base() noexcept { return *this; } - - const _Base& - _M_base() const noexcept { return *this; } - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::hasher hasher; - typedef typename _Base::key_equal key_equal; - typedef typename _Base::allocator_type allocator_type; - typedef typename _Base::key_type key_type; - typedef typename _Base::value_type value_type; - typedef typename _Base::difference_type difference_type; - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef typename _Base::iterator iterator; - typedef typename _Base::const_iterator const_iterator; - - unordered_multiset() = default; - - explicit - unordered_multiset(size_type __n, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__n, __hf, __eql, __a) - { } - - template<typename _InputIterator> - unordered_multiset(_InputIterator __f, _InputIterator __l, - size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__f, __l, __n, __hf, __eql, __a) - { } - - unordered_multiset(const unordered_multiset&) = default; - - unordered_multiset(const _Base& __x) - : _Base(__x) - { } - - unordered_multiset(unordered_multiset&&) = default; - - explicit - unordered_multiset(const allocator_type& __a) - : _Base(__a) - { } - - unordered_multiset(const unordered_multiset& __umset, - const allocator_type& __a) - : _Base(__umset._M_base(), __a) - { } - - unordered_multiset(unordered_multiset&& __umset, - const allocator_type& __a) - : _Base(std::move(__umset._M_base()), __a) - { } - - unordered_multiset(initializer_list<value_type> __l, - size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__l, __n, __hf, __eql, __a) - { } - - unordered_multiset(size_type __n, const allocator_type& __a) - : unordered_multiset(__n, hasher(), key_equal(), __a) - { } - - unordered_multiset(size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_multiset(__n, __hf, key_equal(), __a) - { } - - template<typename _InputIterator> - unordered_multiset(_InputIterator __first, _InputIterator __last, - size_type __n, - const allocator_type& __a) - : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a) - { } - - template<typename _InputIterator> - unordered_multiset(_InputIterator __first, _InputIterator __last, - size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a) - { } - - unordered_multiset(initializer_list<value_type> __l, - size_type __n, - const allocator_type& __a) - : unordered_multiset(__l, __n, hasher(), key_equal(), __a) - { } - - unordered_multiset(initializer_list<value_type> __l, - size_type __n, const hasher& __hf, - const allocator_type& __a) - : unordered_multiset(__l, __n, __hf, key_equal(), __a) - { } - - unordered_multiset& - operator=(const unordered_multiset&) = default; - - unordered_multiset& - operator=(unordered_multiset&&) = default; - - unordered_multiset& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } - - void - swap(unordered_multiset& __x) - noexcept( noexcept(__x._M_base().swap(__x)) ) - { - _Base::swap(__x); - this->_M_swap(__x); - } - - void - clear() noexcept - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - template<typename... _Args> - iterator - emplace(_Args&&... __args) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::emplace(std::forward<_Args>(__args)...); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename... _Args> - iterator - emplace_hint(const_iterator __it, _Args&&... __args) - { - size_type __old_size = _Base::bucket_count(); - iterator __res - = _Base::emplace_hint(__it, std::forward<_Args>(__args)...); - this->_M_profile_resize(__old_size); - return __res; - } - - void - insert(std::initializer_list<value_type> __l) - { - size_type __old_size = _Base::bucket_count(); - _Base::insert(__l); - this->_M_profile_resize(__old_size); - } - - iterator - insert(const value_type& __obj) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__obj); - this->_M_profile_resize(__old_size); - return __res; - } - - iterator - insert(const_iterator __iter, const value_type& __v) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__iter, __v); - this->_M_profile_resize(__old_size); - return __res; - } - - iterator - insert(value_type&& __obj) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(std::move(__obj)); - this->_M_profile_resize(__old_size); - return __res; - } - - iterator - insert(const_iterator __iter, value_type&& __v) - { - size_type __old_size = _Base::bucket_count(); - iterator __res = _Base::insert(__iter, std::move(__v)); - this->_M_profile_resize(__old_size); - return __res; - } - - template<typename _InputIter> - void - insert(_InputIter __first, _InputIter __last) - { - size_type __old_size = _Base::bucket_count(); - _Base::insert(__first, __last); - this->_M_profile_resize(__old_size); - } - - void - rehash(size_type __n) - { - size_type __old_size = _Base::bucket_count(); - _Base::rehash(__n); - this->_M_profile_resize(__old_size); - } - }; - - template<typename _Value, typename _Hash, typename _Pred, typename _Alloc> - inline void - swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, - unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - - template<typename _Value, typename _Hash, typename _Pred, typename _Alloc> - inline bool - operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, - const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) - { return static_cast<const _GLIBCXX_STD_BASE&>(__x) == __y; } - - template<typename _Value, typename _Hash, typename _Pred, typename _Alloc> - inline bool - operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, - const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) - { return !(__x == __y); } - -} // namespace __profile -} // namespace std - -#undef _GLIBCXX_BASE -#undef _GLIBCXX_STD_BASE - -#endif // C++11 - -#endif diff --git a/libstdc++-v3/include/profile/vector b/libstdc++-v3/include/profile/vector deleted file mode 100644 index 56fe23a9ddd..00000000000 --- a/libstdc++-v3/include/profile/vector +++ /dev/null @@ -1,572 +0,0 @@ -// Profiling vector implementation -*- C++ -*- - -// Copyright (C) 2009-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -/** @file profile/vector - * This file is a GNU profile extension to the Standard C++ Library. - */ - -#ifndef _GLIBCXX_PROFILE_VECTOR -#define _GLIBCXX_PROFILE_VECTOR 1 - -#include <vector> -#include <utility> -#include <profile/base.h> -#include <profile/iterator_tracker.h> - -namespace std _GLIBCXX_VISIBILITY(default) -{ -namespace __profile -{ - template<typename _Vector> - class _Vector_profile_pre - { - _Vector& - _M_conjure() - { return *static_cast<_Vector*>(this); } - - public: -#if __cplusplus >= 201103L - _Vector_profile_pre() = default; - _Vector_profile_pre(const _Vector_profile_pre&) = default; - _Vector_profile_pre(_Vector_profile_pre&&) = default; - - _Vector_profile_pre& - operator=(const _Vector_profile_pre&) - { _M_conjure()._M_profile_destruct(); } - - _Vector_profile_pre& - operator=(_Vector_profile_pre&&) noexcept - { _M_conjure()._M_profile_destruct(); } -#endif - }; - - template<typename _Vector> - class _Vector_profile_post - { - _Vector& - _M_conjure() - { return *static_cast<_Vector*>(this); } - - protected: - __gnu_profile::__container_size_info* _M_size_info; - __gnu_profile::__vector2list_info* _M_vect2list_info; - - _Vector_profile_post() _GLIBCXX_NOEXCEPT - { _M_profile_construct(); } - -#if __cplusplus >= 201103L - _Vector_profile_post(const _Vector_profile_post&) noexcept - : _Vector_profile_post() { } - _Vector_profile_post(_Vector_profile_post&& __other) noexcept - : _Vector_profile_post() - { _M_swap(__other); } - - _Vector_profile_post& - operator=(const _Vector_profile_post&) noexcept - { _M_profile_construct(); } - - _Vector_profile_post& - operator=(_Vector_profile_post&& __other) noexcept - { - _M_swap(__other); - __other._M_profile_construct(); - } -#endif - - ~_Vector_profile_post() - { _M_conjure()._M_profile_destruct(); } - - public: - void - _M_profile_construct() _GLIBCXX_NOEXCEPT - { - _M_size_info = - __profcxx_vector_size_construct(_M_conjure().capacity()); - _M_vect2list_info = __profcxx_vector2list_construct(); - } - - void - _M_profile_destruct() _GLIBCXX_NOEXCEPT - { - __profcxx_vector2list_destruct(_M_vect2list_info); - _M_vect2list_info = 0; - __profcxx_vector_size_destruct(_M_size_info, - _M_conjure().capacity(), - _M_conjure().size()); - _M_size_info = 0; - } - - void - _M_swap(_Vector_profile_post& __other) _GLIBCXX_NOEXCEPT - { - std::swap(_M_size_info, __other._M_size_info); - std::swap(_M_vect2list_info, __other._M_vect2list_info); - } - }; - - template<typename _Tp, - typename _Allocator = std::allocator<_Tp> > - class vector - : public _Vector_profile_pre<vector<_Tp, _Allocator> >, - public _GLIBCXX_STD_C::vector<_Tp, _Allocator>, - public _Vector_profile_post<vector<_Tp, _Allocator> > - { - typedef _GLIBCXX_STD_C::vector<_Tp, _Allocator> _Base; - - typedef typename _Base::iterator _Base_iterator; - typedef typename _Base::const_iterator _Base_const_iterator; - - public: - typedef typename _Base::reference reference; - typedef typename _Base::const_reference const_reference; - - typedef __iterator_tracker<_Base_iterator, vector> - iterator; - typedef __iterator_tracker<_Base_const_iterator, vector> - const_iterator; - - typedef typename _Base::size_type size_type; - typedef typename _Base::difference_type difference_type; - - typedef _Tp value_type; - typedef _Allocator allocator_type; - typedef typename _Base::pointer pointer; - typedef typename _Base::const_pointer const_pointer; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - - _Base& - _M_base() _GLIBCXX_NOEXCEPT { return *this; } - - const _Base& - _M_base() const _GLIBCXX_NOEXCEPT { return *this; } - - // 23.2.4.1 construct/copy/destroy: - -#if __cplusplus < 201103L - vector() - { } - - vector(const vector& __x) - : _Base(__x) { } -#else - vector() = default; - vector(const vector&) = default; - vector(vector&&) = default; -#endif - - explicit - vector(const _Allocator& __a) _GLIBCXX_NOEXCEPT - : _Base(__a) { } - -#if __cplusplus >= 201103L - explicit - vector(size_type __n, const _Allocator& __a = _Allocator()) - : _Base(__n, __a) { } - - vector(size_type __n, const _Tp& __value, - const _Allocator& __a = _Allocator()) - : _Base(__n, __value, __a) { } -#else - explicit - vector(size_type __n, const _Tp& __value = _Tp(), - const _Allocator& __a = _Allocator()) - : _Base(__n, __value, __a) { } -#endif - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> -#else - template<typename _InputIterator> -#endif - vector(_InputIterator __first, _InputIterator __last, - const _Allocator& __a = _Allocator()) - : _Base(__first, __last, __a) { } - - /// Construction from a normal-mode vector - vector(const _Base& __x) - : _Base(__x) { } - -#if __cplusplus >= 201103L - vector(const _Base& __x, const _Allocator& __a) - : _Base(__x, __a) { } - - vector(vector&& __x, const _Allocator& __a) - : _Base(std::move(__x), __a) { } - - vector(initializer_list<value_type> __l, - const allocator_type& __a = allocator_type()) - : _Base(__l, __a) { } -#endif - -#if __cplusplus < 201103L - vector& - operator=(const vector& __x) - { - this->_M_profile_destruct(); - _M_base() = __x; - this->_M_profile_construct(); - return *this; - } -#else - vector& - operator=(const vector&) = default; - - vector& - operator=(vector&&) = default; - - vector& - operator=(initializer_list<value_type> __l) - { - this->_M_profile_destruct(); - _M_base() = __l; - this->_M_profile_construct(); - return *this; - } -#endif - - // iterators: - iterator - begin() _GLIBCXX_NOEXCEPT - { return iterator(_Base::begin(), this); } - - const_iterator - begin() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::begin(), this); } - - iterator - end() _GLIBCXX_NOEXCEPT - { return iterator(_Base::end(), this); } - - const_iterator - end() const _GLIBCXX_NOEXCEPT - { return const_iterator(_Base::end(), this); } - - reverse_iterator - rbegin() _GLIBCXX_NOEXCEPT - { return reverse_iterator(end()); } - - const_reverse_iterator - rbegin() const _GLIBCXX_NOEXCEPT - { return const_reverse_iterator(end()); } - - reverse_iterator - rend() _GLIBCXX_NOEXCEPT - { return reverse_iterator(begin()); } - - const_reverse_iterator - rend() const _GLIBCXX_NOEXCEPT - { return const_reverse_iterator(begin()); } - -#if __cplusplus >= 201103L - const_iterator - cbegin() const noexcept - { return const_iterator(_Base::begin(), this); } - - const_iterator - cend() const noexcept - { return const_iterator(_Base::end(), this); } - - const_reverse_iterator - crbegin() const noexcept - { return const_reverse_iterator(end()); } - - const_reverse_iterator - crend() const noexcept - { return const_reverse_iterator(begin()); } -#endif - - // 23.2.4.2 capacity: - -#if __cplusplus >= 201103L - void - resize(size_type __sz) - { - __profcxx_vector2list_invalid_operator(this->_M_vect2list_info); - _M_profile_resize(this->capacity(), __sz); - _Base::resize(__sz); - } - - void - resize(size_type __sz, const _Tp& __c) - { - __profcxx_vector2list_invalid_operator(this->_M_vect2list_info); - _M_profile_resize(this->capacity(), __sz); - _Base::resize(__sz, __c); - } -#else - void - resize(size_type __sz, _Tp __c = _Tp()) - { - __profcxx_vector2list_invalid_operator(this->_M_vect2list_info); - _M_profile_resize(this->capacity(), __sz); - _Base::resize(__sz, __c); - } -#endif - - // element access: - reference - operator[](size_type __n) _GLIBCXX_NOEXCEPT - { - __profcxx_vector2list_invalid_operator(this->_M_vect2list_info); - return _M_base()[__n]; - } - const_reference - operator[](size_type __n) const _GLIBCXX_NOEXCEPT - { - __profcxx_vector2list_invalid_operator(this->_M_vect2list_info); - return _M_base()[__n]; - } - - // 23.2.4.3 modifiers: - void - push_back(const _Tp& __x) - { - size_type __old_size = this->capacity(); - _Base::push_back(__x); - _M_profile_resize(__old_size, this->capacity()); - } - -#if __cplusplus >= 201103L - void - push_back(_Tp&& __x) - { - size_type __old_size = this->capacity(); - _Base::push_back(std::move(__x)); - _M_profile_resize(__old_size, this->capacity()); - } - -#endif - - iterator -#if __cplusplus >= 201103L - insert(const_iterator __pos, const _Tp& __x) -#else - insert(iterator __pos, const _Tp& __x) -#endif - { - __profcxx_vector2list_insert(this->_M_vect2list_info, - __pos.base() - _Base::begin(), - this->size()); - size_type __old_size = this->capacity(); - _Base_iterator __res = _Base::insert(__pos.base(), __x); - _M_profile_resize(__old_size, this->capacity()); - return iterator(__res, this); - } - -#if __cplusplus >= 201103L - iterator - insert(const_iterator __pos, _Tp&& __x) - { - __profcxx_vector2list_insert(this->_M_vect2list_info, - __pos.base() - _Base::cbegin(), - this->size()); - size_type __old_size = this->capacity(); - _Base_iterator __res = _Base::insert(__pos.base(), __x); - _M_profile_resize(__old_size, this->capacity()); - return iterator(__res, this); - } - - template<typename... _Args> - iterator - emplace(const_iterator __pos, _Args&&... __args) - { - _Base_iterator __res = _Base::emplace(__pos.base(), - std::forward<_Args>(__args)...); - return iterator(__res, this); - } - - iterator - insert(const_iterator __pos, initializer_list<value_type> __l) - { return this->insert(__pos, __l.begin(), __l.end()); } -#endif - - void - swap(vector& __x) -#if __cplusplus >= 201103L - noexcept( noexcept(declval<_Base>().swap(__x)) ) -#endif - { - _Base::swap(__x); - this->_M_swap(__x); - } - -#if __cplusplus >= 201103L - iterator - insert(const_iterator __pos, size_type __n, const _Tp& __x) - { - __profcxx_vector2list_insert(this->_M_vect2list_info, - __pos.base() - _Base::cbegin(), - this->size()); - size_type __old_size = this->capacity(); - _Base_iterator __res = _Base::insert(__pos, __n, __x); - _M_profile_resize(__old_size, this->capacity()); - return iterator(__res, this); - } -#else - void - insert(iterator __pos, size_type __n, const _Tp& __x) - { - __profcxx_vector2list_insert(this->_M_vect2list_info, - __pos.base() - _Base::begin(), - this->size()); - size_type __old_size = this->capacity(); - _Base::insert(__pos, __n, __x); - _M_profile_resize(__old_size, this->capacity()); - } -#endif - -#if __cplusplus >= 201103L - template<typename _InputIterator, - typename = std::_RequireInputIter<_InputIterator>> - iterator - insert(const_iterator __pos, - _InputIterator __first, _InputIterator __last) - { - __profcxx_vector2list_insert(this->_M_vect2list_info, - __pos.base() - _Base::cbegin(), - this->size()); - size_type __old_size = this->capacity(); - _Base_iterator __res = _Base::insert(__pos, __first, __last); - _M_profile_resize(__old_size, this->capacity()); - return iterator(__res, this); - } -#else - template<typename _InputIterator> - void - insert(iterator __pos, - _InputIterator __first, _InputIterator __last) - { - __profcxx_vector2list_insert(this->_M_vect2list_info, - __pos.base() - _Base::begin(), - this->size()); - size_type __old_size = this->capacity(); - _Base::insert(__pos, __first, __last); - _M_profile_resize(__old_size, this->capacity()); - } -#endif - - iterator -#if __cplusplus >= 201103L - erase(const_iterator __pos) -#else - erase(iterator __pos) -#endif - { return iterator(_Base::erase(__pos.base()), this); } - - iterator -#if __cplusplus >= 201103L - erase(const_iterator __first, const_iterator __last) -#else - erase(iterator __first, iterator __last) -#endif - { return iterator(_Base::erase(__first.base(), __last.base()), this); } - - void - clear() _GLIBCXX_NOEXCEPT - { - this->_M_profile_destruct(); - _Base::clear(); - this->_M_profile_construct(); - } - - inline void - _M_profile_iterate(int __rewind = 0) const - { __profcxx_vector2list_iterate(this->_M_vect2list_info, __rewind); } - - private: - void _M_profile_resize(size_type __old_size, size_type __new_size) - { - if (__old_size < __new_size) - { - __profcxx_vector_size_resize(this->_M_size_info, - this->size(), __new_size); - __profcxx_vector2list_resize(this->_M_vect2list_info, - this->size(), __new_size); - } - } - }; - - template<typename _Tp, typename _Alloc> - inline bool - operator==(const vector<_Tp, _Alloc>& __lhs, - const vector<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() == __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator!=(const vector<_Tp, _Alloc>& __lhs, - const vector<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() != __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator<(const vector<_Tp, _Alloc>& __lhs, - const vector<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() < __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator<=(const vector<_Tp, _Alloc>& __lhs, - const vector<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() <= __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator>=(const vector<_Tp, _Alloc>& __lhs, - const vector<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() >= __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline bool - operator>(const vector<_Tp, _Alloc>& __lhs, - const vector<_Tp, _Alloc>& __rhs) - { return __lhs._M_base() > __rhs._M_base(); } - - template<typename _Tp, typename _Alloc> - inline void - swap(vector<_Tp, _Alloc>& __lhs, vector<_Tp, _Alloc>& __rhs) - _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs))) - { __lhs.swap(__rhs); } - -} // namespace __profile - -#if __cplusplus >= 201103L - // DR 1182. - /// std::hash specialization for vector<bool>. - template<typename _Alloc> - struct hash<__profile::vector<bool, _Alloc>> - : public __hash_base<size_t, __profile::vector<bool, _Alloc>> - { - size_t - operator()(const __profile::vector<bool, _Alloc>& __b) const noexcept - { - return std::hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>()(__b._M_base()); - } - }; -#endif - -} // namespace std - -#endif diff --git a/libstdc++-v3/scripts/run_doxygen b/libstdc++-v3/scripts/run_doxygen index eb3559a61c6..d73768cb4c1 100644 --- a/libstdc++-v3/scripts/run_doxygen +++ b/libstdc++-v3/scripts/run_doxygen @@ -329,10 +329,6 @@ for f in *__parallel_*; do newname=`echo $f | sed 's/__parallel_/__parallel::/'` mv $f $newname done -for f in *__profile_*; do - newname=`echo $f | sed 's/__profile_/__profile::/'` - mv $f $newname -done # Remove inline namespaces used for versioning. for f in *_V2_*; do @@ -376,10 +372,6 @@ for f in __gnu_parallel_*; do newname=`echo $f | sed 's/^__gnu_parallel_/__gnu_parallel::/'` mv $f $newname done -for f in __gnu_profile_*; do - newname=`echo $f | sed 's/^__gnu_profile_/__gnu_profile::/'` - mv $f $newname -done for f in __gnu_pbds_*; do newname=`echo $f | sed 's/^__gnu_pbds_/__gnu_pbds::/'` mv $f $newname diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/60497.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/60497.cc index 6391e62c9da..7a4451e141b 100644 --- a/libstdc++-v3/testsuite/23_containers/array/element_access/60497.cc +++ b/libstdc++-v3/testsuite/23_containers/array/element_access/60497.cc @@ -21,7 +21,6 @@ #include <array> #include <debug/array> -#include <profile/array> #include <memory> struct A; @@ -32,6 +31,3 @@ auto b = std::get<0>(std::move(a)); std::__debug::array<B<A>*, 1> c; auto d = std::__debug::get<0>(std::move(c)); - -std::__profile::array<B<A>*, 1> e; -auto f = std::__profile::get<0>(std::move(e)); diff --git a/libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc b/libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc index 1fbb44e3de4..91d8d26d7a7 100644 --- a/libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc +++ b/libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc @@ -1,6 +1,5 @@ // { dg-options "-std=gnu++17" } // { dg-do compile } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2016-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc index fcde485eda5..deb71f2d51b 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc @@ -34,7 +34,7 @@ test01() fld.resize(0); VERIFY(fld.empty() == true); -#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE) +#ifdef _GLIBCXX_DEBUG using std::_GLIBCXX_STD_C::_Fwd_list_node; #else using std::_Fwd_list_node; diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc index 05b0b5701c0..1b23938c088 100644 --- a/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc @@ -26,10 +26,10 @@ void test01() typedef std::list<int> list_type; list_type l; -#if ! defined _GLIBCXX_DEBUG && ! defined _GLIBCXX_PROFILE - using std::_List_node; -#else +#ifdef _GLIBCXX_DEBUG using std::_GLIBCXX_STD_C::_List_node; +#else + using std::_List_node; #endif VERIFY( l.max_size() == std::allocator<_List_node<int> >().max_size() ); diff --git a/libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc b/libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc index cde0cd3da92..cf72e46b5ce 100644 --- a/libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc +++ b/libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc @@ -16,7 +16,6 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <map> #include <algorithm> diff --git a/libstdc++-v3/testsuite/23_containers/map/modifiers/insert_or_assign/1.cc b/libstdc++-v3/testsuite/23_containers/map/modifiers/insert_or_assign/1.cc index 5699315c3f0..39526a9520d 100644 --- a/libstdc++-v3/testsuite/23_containers/map/modifiers/insert_or_assign/1.cc +++ b/libstdc++-v3/testsuite/23_containers/map/modifiers/insert_or_assign/1.cc @@ -1,5 +1,4 @@ // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2015-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/map/modifiers/try_emplace/1.cc b/libstdc++-v3/testsuite/23_containers/map/modifiers/try_emplace/1.cc index d9de9f7b9da..17abdc41531 100644 --- a/libstdc++-v3/testsuite/23_containers/map/modifiers/try_emplace/1.cc +++ b/libstdc++-v3/testsuite/23_containers/map/modifiers/try_emplace/1.cc @@ -1,5 +1,4 @@ // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2015-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/multimap/modifiers/extract.cc b/libstdc++-v3/testsuite/23_containers/multimap/modifiers/extract.cc index 3ba61a81b66..0c9ba093895 100644 --- a/libstdc++-v3/testsuite/23_containers/multimap/modifiers/extract.cc +++ b/libstdc++-v3/testsuite/23_containers/multimap/modifiers/extract.cc @@ -16,7 +16,6 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <map> #include <algorithm> diff --git a/libstdc++-v3/testsuite/23_containers/multiset/modifiers/extract.cc b/libstdc++-v3/testsuite/23_containers/multiset/modifiers/extract.cc index 667e8ec9c29..61daacd3347 100644 --- a/libstdc++-v3/testsuite/23_containers/multiset/modifiers/extract.cc +++ b/libstdc++-v3/testsuite/23_containers/multiset/modifiers/extract.cc @@ -16,7 +16,6 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <set> #include <algorithm> diff --git a/libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc b/libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc index ee4a7401804..48bca02c039 100644 --- a/libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc +++ b/libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc @@ -16,7 +16,6 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <set> #include <algorithm> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc index 42ea9a058f1..a3cd5e6eb2e 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc @@ -16,7 +16,6 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <unordered_map> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/extract.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/extract.cc index 449969ba146..21f0f3b6019 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/extract.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/extract.cc @@ -16,7 +16,6 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <unordered_map> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/extract.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/extract.cc index e27e56866cc..909163c86de 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/extract.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/extract.cc @@ -16,7 +16,6 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <unordered_set> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc index 1e7dca38731..324dba7a161 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc @@ -16,7 +16,6 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <unordered_set> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc index cb631924fa5..2c84964210b 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc @@ -29,8 +29,6 @@ void test01() #ifdef _GLIBCXX_DEBUG using std::_GLIBCXX_STD_C::_S_word_bit; -#elif defined(_GLIBCXX_PROFILE) - using std::_GLIBCXX_STD_C::_S_word_bit; #else using std::_S_word_bit; #endif diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc index 102960fe459..25a9b65e5a2 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc @@ -26,8 +26,6 @@ #ifdef _GLIBCXX_DEBUG using std::_GLIBCXX_STD_C::_S_word_bit; -#elif defined(_GLIBCXX_PROFILE) - using std::_GLIBCXX_STD_C::_S_word_bit; #else using std::_S_word_bit; #endif diff --git a/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc b/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc index ffa19867ed0..187e433d9d3 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc @@ -1,5 +1,4 @@ // { dg-do run { target c++11 } } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // The class X and test code is by by Howard Hinnant and used under a // Creative Commons Attribution 4.0 International License. diff --git a/libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc b/libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc index 1862cd2deb7..43d260ed1c3 100644 --- a/libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc +++ b/libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc @@ -17,7 +17,6 @@ // { dg-options "-D_GLIBCXX_DEBUG" } // { dg-do run { target c++11 } } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <algorithm> #include <functional> diff --git a/libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc b/libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc index b67ac755940..a80fe66beff 100644 --- a/libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc +++ b/libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc @@ -17,7 +17,6 @@ // { dg-options "-D_GLIBCXX_DEBUG" } // { dg-do run { target c++11 } } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <algorithm> #include <functional> diff --git a/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc index c40b927a7a1..9c8c2938a0d 100644 --- a/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc +++ b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc @@ -17,7 +17,6 @@ // { dg-options "-D_GLIBCXX_DEBUG" } // { dg-do link { target c++11 } } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <algorithm> diff --git a/libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc b/libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc index 6fbde5888fb..e48facb7173 100644 --- a/libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc +++ b/libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc @@ -17,7 +17,6 @@ // { dg-options "-D_GLIBCXX_DEBUG" } // { dg-do run { target c++11 } } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <algorithm> #include <functional> diff --git a/libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc b/libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc index 9fade2de676..7dd43b6074d 100644 --- a/libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc +++ b/libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc @@ -17,7 +17,6 @@ // { dg-options "-D_GLIBCXX_DEBUG" } // { dg-do run { target c++11 } } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } #include <algorithm> #include <functional> diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am index 2821345c8c0..92eff6d1e0a 100644 --- a/libstdc++-v3/testsuite/Makefile.am +++ b/libstdc++-v3/testsuite/Makefile.am @@ -196,9 +196,6 @@ libgomp_flags=-B${glibcxx_builddir}/../libgomp \ atomic_flags=$(ATOMIC_FLAGS) parallel_flags="unix/-D_GLIBCXX_PARALLEL/-fopenmp" -# Runs the testsuite in profile mode. -profile_flags = "unix/-D_GLIBCXX_PROFILE" - check-debug: site.exp outputdir=debug; export outputdir; \ if test ! -d $${outputdir}; then \ @@ -226,17 +223,8 @@ check-performance-parallel: testsuite_files_performance ${performance_script} CXXFLAGS="-D_GLIBCXX_PARALLEL -fopenmp $(atomic_flags) $(libgomp_flags)"; export CXXFLAGS; \ ${check_performance_script} ${glibcxx_srcdir} ${glibcxx_builddir}) -check-profile: site.exp - -@(outputdir=profile; export outputdir; \ - if test ! -d $${outputdir}; then \ - mkdir $${outputdir}; \ - fi; \ - srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ - EXPECT=$(EXPECT); export EXPECT; \ - $(MAKE) CXXFLAGS="$(atomic_flags) " RUNTESTFLAGS="$(RUNTESTFLAGS) conformance.exp --outdir $${outputdir} --objdir $${outputdir} --target_board=$(profile_flags)" check-DEJAGNU; ) - .PHONY: baseline_symbols new-abi-baseline \ - check-abi check-compile check-performance check-parallel check-profile + check-abi check-compile check-performance check-parallel # By adding these files here, automake will remove them for 'make clean' CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \ @@ -245,4 +233,4 @@ CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \ # To remove directories. clean-local: - rm -rf de fr debug parallel profile binaries normal* + rm -rf de fr debug parallel binaries normal* diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in index 32aea3cedd4..f68d62776ff 100644 --- a/libstdc++-v3/testsuite/Makefile.in +++ b/libstdc++-v3/testsuite/Makefile.in @@ -414,9 +414,6 @@ libgomp_flags = -B${glibcxx_builddir}/../libgomp \ atomic_flags = $(ATOMIC_FLAGS) parallel_flags = "unix/-D_GLIBCXX_PARALLEL/-fopenmp" -# Runs the testsuite in profile mode. -profile_flags = "unix/-D_GLIBCXX_PROFILE" - # By adding these files here, automake will remove them for 'make clean' CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \ testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \ @@ -733,21 +730,12 @@ check-performance-parallel: testsuite_files_performance ${performance_script} CXXFLAGS="-D_GLIBCXX_PARALLEL -fopenmp $(atomic_flags) $(libgomp_flags)"; export CXXFLAGS; \ ${check_performance_script} ${glibcxx_srcdir} ${glibcxx_builddir}) -check-profile: site.exp - -@(outputdir=profile; export outputdir; \ - if test ! -d $${outputdir}; then \ - mkdir $${outputdir}; \ - fi; \ - srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ - EXPECT=$(EXPECT); export EXPECT; \ - $(MAKE) CXXFLAGS="$(atomic_flags) " RUNTESTFLAGS="$(RUNTESTFLAGS) conformance.exp --outdir $${outputdir} --objdir $${outputdir} --target_board=$(profile_flags)" check-DEJAGNU; ) - .PHONY: baseline_symbols new-abi-baseline \ - check-abi check-compile check-performance check-parallel check-profile + check-abi check-compile check-performance check-parallel # To remove directories. clean-local: - rm -rf de fr debug parallel profile binaries normal* + rm -rf de fr debug parallel binaries normal* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/libstdc++-v3/testsuite/ext/profile/all.cc b/libstdc++-v3/testsuite/ext/profile/all.cc deleted file mode 100644 index 03146681aaa..00000000000 --- a/libstdc++-v3/testsuite/ext/profile/all.cc +++ /dev/null @@ -1,52 +0,0 @@ -// { dg-options "-O0" } -// { dg-additional-options "-D_GLIBCXX_PROFILE_NO_THREADS" { target { ! tls_native } } } -// { dg-do compile { target c++11 } } -// { dg-require-profile-mode "" } - -// -*- C++ -*- - -// Copyright (C) 2006-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -#include <map> -#include <vector> -#include <unordered_map> - -using std::map; -using std::vector; -using std::unordered_map; - -struct dumb_hash { - size_t operator()(int x) const {return 0;} - size_t operator()(int x, int y) const {return x == y;} -}; - -int main() { - map<int, int> m_to_umap; - vector<int> v_to_list; - unordered_map<int, int> um_too_small; - unordered_map<int, int> um_too_large(1000000); - unordered_map<int, int, dumb_hash, dumb_hash> um_dumb_hash; - - for (int i = 0; i < 10000; ++i) { - m_to_umap[i] = i; - v_to_list.insert(v_to_list.begin(), i); - um_too_small[i] = i; - um_too_small[i] = i; - um_dumb_hash[i] = i; - } -} diff --git a/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc b/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc deleted file mode 100644 index cd2a48845aa..00000000000 --- a/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// { dg-options "-D_GLIBCXX_DEBUG -D_GLIBCXX_PROFILE" } -// { dg-do compile } - -// -*- C++ -*- - -// Otherwise we may get *multiple* errors. -#undef _GLIBCXX_PARALLEL - -// Copyright (C) 2006-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -#include <vector> - -// { dg-error "multiple inlined namespaces" "" { target *-*-* } 0 } - -// "template argument 1 is invalid" -// { dg-prune-output "tuple:993" } -// PMR alias templates cause ambiguities between debug and profile containers: -// { dg-prune-output "is ambiguous" } diff --git a/libstdc++-v3/testsuite/ext/profile/profiler_algos.cc b/libstdc++-v3/testsuite/ext/profile/profiler_algos.cc deleted file mode 100644 index 0626c3949e6..00000000000 --- a/libstdc++-v3/testsuite/ext/profile/profiler_algos.cc +++ /dev/null @@ -1,147 +0,0 @@ -// { dg-require-profile-mode "" } - -// -*- C++ -*- - -// Unit tests for profile/impl/profile_algos.h. - -// Copyright (C) 2010-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -#include <vector> -#include <profile/impl/profiler.h> - -using std::_GLIBCXX_STD_C::vector; - -enum Failure -{ - NO_FAILURES = 0x0, - INSERT_AFTER_N = 0x1, - INSERT_AT_HEAD = 0x2, - INSERT_AT_TAIL = 0x4, - INSERT_IN_THE_MIDDLE = 0x8, - TOP_N = 0x10, - FOR_EACH = 0x20, - REMOVE = 0x40 -}; - - -static int -test_insert_top_n() -{ - vector<int> v; - - for (int i = 0; i < 10; i++) - v.push_back(10 - i); - - // Inserting -5 should have no effect if size is limited to 10. - __gnu_profile::__insert_top_n(v, -5, 10); - for (int i = 0; i < 10; i++) - if (v[i] != 10 - i) - return INSERT_AFTER_N; - - // Insert at head. - __gnu_profile::__insert_top_n(v, 11, 10); - for (int i = 0; i < 11; i++) - if (v[i] != 11 - i) - return INSERT_AT_HEAD; - - // Insert at end. - __gnu_profile::__insert_top_n(v, 0, 100); - for (int i = 0; i < 12; i++) - if (v[i] != 11 - i) - return INSERT_AT_TAIL; - - // Insert in the middle. - __gnu_profile::__insert_top_n(v, 6, 11); - for (int i = 0; i < 6; i++) - if (v[i] != 11 - i) - return INSERT_IN_THE_MIDDLE; - for (int i = 6; i < 13; i++) - if (v[i] != 12 - i) - return INSERT_IN_THE_MIDDLE; - - return NO_FAILURES; -} - -static int -test_top_n() -{ - vector<int> v, out; - - for (int i = 0; i < 100; i++) - { - v.push_back(100 + i); - v.push_back(100 - i); - } - - __gnu_profile::__top_n(v, out, 10); - - for (int i = 0; i < 10; i++) - if (out[i] != 199 - i) - return TOP_N; - - return NO_FAILURES; -} - -struct test_for_each_helper -{ - static int sum; - void operator ()(int i) { - sum += i; - } -}; - -int test_for_each_helper::sum = 0; - -static int -test_for_each() -{ - vector<int> v; - test_for_each_helper helper; - int checksum = 0; - - for (int i = 0; i < 10; i++) - { - v.push_back(i); - checksum += i; - } - - __gnu_profile::__for_each(v.begin(), v.end(), helper); - - return helper.sum == checksum ? NO_FAILURES : FOR_EACH; -} - -static int -test_remove() -{ - vector<char> v; - - for (int i = 0; i < 10; i++) - v.push_back(' '); - v.push_back('x'); - for (int i = 0; i < 10; i++) - v.push_back(' '); - v.push_back('x'); - - return __gnu_profile::__remove(v.begin(), v.end(), ' ') == v.begin() + 2 - ? NO_FAILURES : REMOVE; -} - -int main() -{ - return test_insert_top_n() | test_top_n() | test_for_each() | test_remove(); -} diff --git a/libstdc++-v3/testsuite/ext/profile/replace_new.cc b/libstdc++-v3/testsuite/ext/profile/replace_new.cc deleted file mode 100644 index 7a707e868d5..00000000000 --- a/libstdc++-v3/testsuite/ext/profile/replace_new.cc +++ /dev/null @@ -1,54 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2006-2019 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -// { dg-require-profile-mode "" } - -#include <vector> -#include <testsuite_hooks.h> - -using std::vector; - -void* operator new(std::size_t size) THROW(std::bad_alloc) -{ - void* p = std::malloc(size); - if (!p) - throw std::bad_alloc(); - return p; -} - -void* operator new (std::size_t size, const std::nothrow_t&) throw() -{ - // With _GLIBCXX_PROFILE, the instrumentation of the vector constructor - // will call back into this new operator. - vector<int> v; - return std::malloc(size); -} - -void operator delete(void* p) throw() -{ - if (p) - std::free(p); -} - -int -main() -{ - vector<int> v; - return 0; -} diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc b/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc index 39121334e68..13cc87c80c4 100644 --- a/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc +++ b/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc @@ -31,9 +31,7 @@ typedef std::char_traits<char_t> traits_t; typedef __gnu_cxx::throw_allocator_random<char_t> allocator_t; typedef std::basic_string<char_t, traits_t, allocator_t> string_t; -#ifndef _GLIBCXX_PROFILE string_t s("bayou bend"); -#endif int main() { diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc b/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc index 2496e814d34..87a9f0c7334 100644 --- a/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc +++ b/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc @@ -30,12 +30,10 @@ typedef std::basic_string<char_t, traits_t, allocator_t> string_t; int main() { -#ifndef _GLIBCXX_PROFILE { string_t s; s += "bayou bend"; } -#endif if (__gnu_test::counter::count() != 0) throw std::runtime_error("count not zero"); diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index d0efc90a1ba..87fbed696ed 100644 --- a/libstdc++-v3/testsuite/lib/libstdc++.exp +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp @@ -966,30 +966,6 @@ proc check_v3_target_debug_mode { } { }] } -proc check_v3_target_profile_mode { } { - return [check_v3_target_prop_cached et_profile_mode { - global tool - # Set up and preprocess a C++ test program that depends - # on profile mode activated. - set src profile_mode[pid].cc - - set f [open $src "w"] - puts $f "#ifndef _GLIBCXX_PROFILE" - puts $f "# error No profile mode" - puts $f "#endif" - close $f - - set lines [v3_target_compile $src /dev/null preprocess ""] - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - return 1 - } - return 0 - }] -} - proc check_v3_target_normal_mode { } { return [check_v3_target_prop_cached et_normal_mode { global tool @@ -999,9 +975,7 @@ proc check_v3_target_normal_mode { } { set f [open $src "w"] puts $f "#include <bits/c++config.h>" - puts $f "#if defined(_GLIBCXX_DEBUG) || \\" - puts $f " defined(_GLIBCXX_PROFILE) || \\" - puts $f " defined(_GLIBCXX_PARALLEL)" + puts $f "#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL)" puts $f "# error No normal mode" puts $f "#endif" close $f diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/80276.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/80276.cc index fd67aaf3b70..3425b499e3a 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/80276.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/80276.cc @@ -1,6 +1,5 @@ // { dg-do run { target c++11 } } // { dg-options "-g -O0" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2018-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc index a538b854038..7bfc3c68867 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc @@ -1,6 +1,5 @@ // { dg-options "-g -O0" } // { dg-do run } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2014-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc index 616413448bc..7d0a9a21768 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc @@ -1,6 +1,5 @@ // { dg-do run { target c++11 } } // { dg-options "-g -O0" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2011-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc index 4ff462ef519..da0b03d99ab 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc @@ -1,6 +1,5 @@ // { dg-options "-g -O0 -std=gnu++17" } // { dg-do run { target c++17 } } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2014-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc index 54be58329d7..123ffddc806 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc @@ -1,6 +1,5 @@ // { dg-do run } // { dg-options "-g -O0 -std=gnu++98" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2011-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc index 592abbddd14..c7902d1d8d0 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc @@ -1,6 +1,5 @@ // { dg-do run { target c++11 } } // { dg-options "-g -O0" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2016-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/libfundts.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/libfundts.cc index f099bd32b3e..95ed2517cd1 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/libfundts.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/libfundts.cc @@ -1,6 +1,5 @@ // { dg-do run { target c++14 } } // { dg-options "-g -O0" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2014-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc index 453baf8131a..60dfdc597f3 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc @@ -2,7 +2,6 @@ // { dg-do run } // { dg-options "-g -O0 -std=gnu++98" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2011-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc index 6e8c56f44c9..b18f5cc22a9 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc @@ -2,7 +2,6 @@ // { dg-do run { target c++11 } } // { dg-options "-g -O0" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2011-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis.cc index 3f35c53ac46..2fae1b6fb06 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis.cc @@ -1,6 +1,5 @@ // { dg-do run { target c++11 } } // { dg-options "-g -O0" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2011-2019 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis2.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis2.cc index 887e80373e2..883f0391f4e 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis2.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis2.cc @@ -1,6 +1,5 @@ // { dg-do run { target c++11 } } // { dg-options "-g -O0" } -// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2011-2019 Free Software Foundation, Inc. // |