From a88d408f5e9b70170e8d92b4de28986c9e5dbc20 Mon Sep 17 00:00:00 2001 From: bkoz Date: Mon, 11 Feb 2013 23:24:26 +0000 Subject: [PATCH] 2013-02-11 Benjamin Kosnik * doc/html/*: Regenerate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195959 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 4 + libstdc++-v3/doc/html/api.html | 9 +- libstdc++-v3/doc/html/bk02.html | 3 +- libstdc++-v3/doc/html/bk03.html | 3 +- libstdc++-v3/doc/html/faq.html | 99 +++++---- libstdc++-v3/doc/html/index.html | 15 +- libstdc++-v3/doc/html/manual/abi.html | 77 ++++--- libstdc++-v3/doc/html/manual/algorithms.html | 11 +- libstdc++-v3/doc/html/manual/api.html | 41 ++-- libstdc++-v3/doc/html/manual/appendix.html | 7 +- .../doc/html/manual/appendix_contributing.html | 19 +- libstdc++-v3/doc/html/manual/appendix_free.html | 9 +- libstdc++-v3/doc/html/manual/appendix_gfdl.html | 7 +- libstdc++-v3/doc/html/manual/appendix_gpl.html | 11 +- libstdc++-v3/doc/html/manual/appendix_porting.html | 27 ++- libstdc++-v3/doc/html/manual/associative.html | 17 +- libstdc++-v3/doc/html/manual/atomics.html | 11 +- libstdc++-v3/doc/html/manual/backwards.html | 65 +++--- libstdc++-v3/doc/html/manual/bitmap_allocator.html | 9 +- .../doc/html/manual/bitmap_allocator_impl.html | 31 ++- libstdc++-v3/doc/html/manual/bugs.html | 9 +- libstdc++-v3/doc/html/manual/concept_checking.html | 7 +- libstdc++-v3/doc/html/manual/concurrency.html | 11 +- libstdc++-v3/doc/html/manual/configure.html | 7 +- libstdc++-v3/doc/html/manual/containers.html | 15 +- libstdc++-v3/doc/html/manual/containers_and_c.html | 9 +- libstdc++-v3/doc/html/manual/debug.html | 23 +-- libstdc++-v3/doc/html/manual/debug_mode.html | 11 +- .../doc/html/manual/debug_mode_design.html | 35 ++-- .../doc/html/manual/debug_mode_semantics.html | 7 +- libstdc++-v3/doc/html/manual/debug_mode_using.html | 11 +- libstdc++-v3/doc/html/manual/diagnostics.html | 13 +- .../doc/html/manual/documentation_hacking.html | 39 ++-- libstdc++-v3/doc/html/manual/dynamic_memory.html | 9 +- libstdc++-v3/doc/html/manual/ext_algorithms.html | 9 +- .../doc/html/manual/ext_compile_checks.html | 7 +- libstdc++-v3/doc/html/manual/ext_concurrency.html | 15 +- .../doc/html/manual/ext_concurrency_impl.html | 11 +- .../doc/html/manual/ext_concurrency_use.html | 5 +- libstdc++-v3/doc/html/manual/ext_containers.html | 7 +- libstdc++-v3/doc/html/manual/ext_demangling.html | 7 +- libstdc++-v3/doc/html/manual/ext_io.html | 13 +- libstdc++-v3/doc/html/manual/ext_iterators.html | 9 +- libstdc++-v3/doc/html/manual/ext_numerics.html | 7 +- libstdc++-v3/doc/html/manual/ext_preface.html | 7 +- libstdc++-v3/doc/html/manual/ext_sgi.html | 5 +- libstdc++-v3/doc/html/manual/ext_utilities.html | 9 +- libstdc++-v3/doc/html/manual/extensions.html | 9 +- libstdc++-v3/doc/html/manual/facets.html | 103 +++++----- libstdc++-v3/doc/html/manual/fstreams.html | 11 +- .../manual/generalized_numeric_operations.html | 9 +- libstdc++-v3/doc/html/manual/index.html | 27 ++- libstdc++-v3/doc/html/manual/internals.html | 19 +- libstdc++-v3/doc/html/manual/intro.html | 9 +- libstdc++-v3/doc/html/manual/io.html | 11 +- libstdc++-v3/doc/html/manual/io_and_c.html | 9 +- libstdc++-v3/doc/html/manual/iterators.html | 13 +- libstdc++-v3/doc/html/manual/license.html | 9 +- libstdc++-v3/doc/html/manual/localization.html | 35 ++-- libstdc++-v3/doc/html/manual/make.html | 5 +- libstdc++-v3/doc/html/manual/memory.html | 73 ++++--- libstdc++-v3/doc/html/manual/mt_allocator.html | 9 +- .../doc/html/manual/mt_allocator_design.html | 5 +- .../doc/html/manual/mt_allocator_ex_multi.html | 5 +- .../doc/html/manual/mt_allocator_ex_single.html | 5 +- .../doc/html/manual/mt_allocator_impl.html | 11 +- libstdc++-v3/doc/html/manual/numerics.html | 13 +- libstdc++-v3/doc/html/manual/numerics_and_c.html | 9 +- libstdc++-v3/doc/html/manual/pairs.html | 7 +- libstdc++-v3/doc/html/manual/parallel_mode.html | 15 +- .../doc/html/manual/parallel_mode_design.html | 17 +- .../doc/html/manual/parallel_mode_semantics.html | 5 +- .../doc/html/manual/parallel_mode_test.html | 5 +- .../doc/html/manual/parallel_mode_using.html | 9 +- .../manual/policy_based_data_structures_test.html | 221 ++++++++++----------- .../doc/html/manual/policy_data_structures.html | 145 +++++++------- .../html/manual/policy_data_structures_ack.html | 5 +- .../html/manual/policy_data_structures_design.html | 157 ++++++++------- .../html/manual/policy_data_structures_using.html | 43 ++-- libstdc++-v3/doc/html/manual/profile_mode.html | 21 +- libstdc++-v3/doc/html/manual/profile_mode_api.html | 5 +- .../doc/html/manual/profile_mode_cost_model.html | 5 +- .../doc/html/manual/profile_mode_design.html | 23 +-- .../doc/html/manual/profile_mode_devel.html | 9 +- .../doc/html/manual/profile_mode_diagnostics.html | 51 +++-- .../doc/html/manual/profile_mode_impl.html | 15 +- libstdc++-v3/doc/html/manual/setup.html | 13 +- .../doc/html/manual/source_code_style.html | 11 +- .../doc/html/manual/source_design_notes.html | 7 +- .../doc/html/manual/source_organization.html | 7 +- libstdc++-v3/doc/html/manual/status.html | 46 +++-- libstdc++-v3/doc/html/manual/std_contents.html | 13 +- libstdc++-v3/doc/html/manual/streambufs.html | 9 +- libstdc++-v3/doc/html/manual/strings.html | 25 ++- libstdc++-v3/doc/html/manual/stringstreams.html | 7 +- libstdc++-v3/doc/html/manual/support.html | 17 +- libstdc++-v3/doc/html/manual/termination.html | 9 +- libstdc++-v3/doc/html/manual/test.html | 45 ++--- libstdc++-v3/doc/html/manual/traits.html | 7 +- .../doc/html/manual/unordered_associative.html | 64 ++++++ libstdc++-v3/doc/html/manual/using.html | 9 +- .../doc/html/manual/using_concurrency.html | 25 ++- .../doc/html/manual/using_dynamic_or_shared.html | 17 +- libstdc++-v3/doc/html/manual/using_exceptions.html | 35 ++-- libstdc++-v3/doc/html/manual/using_headers.html | 25 ++- libstdc++-v3/doc/html/manual/using_macros.html | 9 +- libstdc++-v3/doc/html/manual/using_namespaces.html | 13 +- libstdc++-v3/doc/html/manual/utilities.html | 11 +- 108 files changed, 1174 insertions(+), 1199 deletions(-) create mode 100644 libstdc++-v3/doc/html/manual/unordered_associative.html diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 537f7a3..38f41af 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,7 @@ +2013-02-11 Benjamin Kosnik + + * doc/html/*: Regenerate. + 2013-02-11 Jason Merrill * linkage.m4 (GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE): New. diff --git a/libstdc++-v3/doc/html/api.html b/libstdc++-v3/doc/html/api.html index 19aebd0..71c5e55 100644 --- a/libstdc++-v3/doc/html/api.html +++ b/libstdc++-v3/doc/html/api.html @@ -1,13 +1,12 @@ - -The GNU C++ Library API Reference

The GNU C++ Library API Reference

The GNU C++ Library API Reference


@@ -20,7 +19,7 @@ particular include file, looking at inheritance diagrams, etc.

The API documentation, rendered into HTML, can be viewed online: -

  • +

    • for the 3.4 release

    • @@ -56,4 +55,4 @@

      In addition, a rendered set of man pages are available in the same location specified above. Start with C++Intro(3). -

    +

\ No newline at end of file diff --git a/libstdc++-v3/doc/html/bk02.html b/libstdc++-v3/doc/html/bk02.html index b81c3cb..df887b8 100644 --- a/libstdc++-v3/doc/html/bk02.html +++ b/libstdc++-v3/doc/html/bk02.html @@ -1,3 +1,2 @@ - - + \ No newline at end of file diff --git a/libstdc++-v3/doc/html/bk03.html b/libstdc++-v3/doc/html/bk03.html index ff9d2d5..316d2cd 100644 --- a/libstdc++-v3/doc/html/bk03.html +++ b/libstdc++-v3/doc/html/bk03.html @@ -1,3 +1,2 @@ - - + \ No newline at end of file diff --git a/libstdc++-v3/doc/html/faq.html b/libstdc++-v3/doc/html/faq.html index 67f6110..0c1d328 100644 --- a/libstdc++-v3/doc/html/faq.html +++ b/libstdc++-v3/doc/html/faq.html @@ -1,10 +1,9 @@ - -Frequently Asked Questions

Frequently Asked Questions

Frequently Asked Questions


1.1. +


1.1. What is libstdc++?
1.2. Why should I use libstdc++? @@ -91,7 +90,7 @@ What's an ABI and why is it so messy?
7.8. How do I make std::vector<T>::capacity() == std::vector<T>::size? -
1.1. +
1.1. What is libstdc++?
1.2. Why should I use libstdc++? @@ -105,7 +104,7 @@ What happened to the older libg++? I need that!
1.7. What if I have more questions? -

1.1.

+

1.1.

What is libstdc++?

The GNU Standard C++ Library v3 is an ongoing project to @@ -115,7 +114,7 @@ bleeding-edge code, the up-to-date source is available over anonymous SVN, and can even be browsed over the web. -

1.2.

+

1.2.

Why should I use libstdc++?

The completion of the ISO C++ standardization gave the C++ @@ -141,7 +140,7 @@ vector<>, iostreams, and algorithms.) Programmers will no longer need to “roll their own” nor be worried about platform-specific incompatibilities. -

1.3.

+

1.3.

Who's in charge of it?

The libstdc++ project is contributed to by several developers @@ -155,13 +154,13 @@ archives, is open to everyone. You can read instructions for doing so on the homepage. If you have questions, ideas, code, or are just curious, sign up! -

1.4.

+

1.4.

When is libstdc++ going to be finished?

Nathan Myers gave the best of all possible answers, responding to a Usenet article asking this question: Sooner, if you help. -

1.5.

+

1.5.

How do I contribute to the effort?

Here is a page devoted to @@ -172,7 +171,7 @@ anybody who is willing to help write documentation, for example, or has found a bug in code that we all thought was working and is willing to provide details, is more than welcome! -

1.6.

+

1.6.

What happened to the older libg++? I need that!

The most recent libg++ README states that libg++ is no longer @@ -180,7 +179,7 @@ projects, and is only being kicked along to support older code.

More information in the backwards compatibility documentation -

1.7.

+

1.7.

What if I have more questions?

If you have read the README file, and your question remains @@ -201,17 +200,17 @@ How is that different from the GNU {Lesser,Library} GPL?

2.4. I see. So, what restrictions are there on programs that use the library? -

2.1.

+

2.1.

What are the license terms for libstdc++?

See our license description for these and related questions. -

2.2.

+

2.2.

So any program which uses libstdc++ falls under the GPL?

No. The special exception permits use of the library in proprietary applications. -

2.3.

+

2.3.

How is that different from the GNU {Lesser,Library} GPL?

The LGPL requires that users be able to replace the LGPL code with a @@ -221,7 +220,7 @@ are expanded inside the code that uses the library. So to allow people to replace the library code, someone using the library would have to distribute their own source, rendering the LGPL equivalent to the GPL. -

2.4.

+

2.4.

I see. So, what restrictions are there on programs that use the library?

None. We encourage such programs to be released as open source, @@ -234,7 +233,7 @@ What's libsupc++?

3.6. This library is HUGE! -

3.1.

How do I install libstdc++? +

3.1.

How do I install libstdc++?

Often libstdc++ comes pre-installed as an integral part of many existing GNU/Linux and Unix systems, as well as many embedded @@ -247,7 +246,7 @@ documentation for detailed instructions. You may wish to browse those files ahead of time to get a feel for what's required. -

3.2.

How does one get current libstdc++ sources? +

3.2.

How does one get current libstdc++ sources?

Libstdc++ sources for all official releases can be obtained as part of the GCC sources, available from various sites and @@ -272,7 +271,7 @@ For more information see SVN details. -

3.3.

How do I know if it works? +

3.3.

How do I know if it works?

Libstdc++ comes with its own validation testsuite, which includes conformance testing, regression testing, ABI testing, and @@ -283,7 +282,7 @@ If you find bugs in the testsuite programs themselves, or if you think of a new test program that should be added to the suite, please write up your idea and send it to the list! -

3.4.

How do I insure that the dynamically linked library will be found? +

3.4.

How do I insure that the dynamically linked library will be found?

Depending on your platform and library version, the error message might be similar to one of the following: @@ -317,7 +316,7 @@

Using LD_LIBRARY_PATH is not always the best solution, Finding Dynamic or Shared Libraries in the manual gives some alternatives. -

3.5.

+

3.5.

What's libsupc++?

If the only functions from libstdc++.a @@ -334,7 +333,7 @@ using anything from the rest of the library, such as IOStreams or vectors, then you'll still need pieces from libstdc++.a. -

3.6.

+

3.6.

This library is HUGE!

Usually the size of libraries on disk isn't noticeable. When a @@ -381,7 +380,7 @@ Recent GNU/Linux glibc required?

4.8. Can't use wchar_t/wstring on FreeBSD -

4.1.

+

4.1.

Can libstdc++ be used with non-GNU compilers?

Perhaps. @@ -401,7 +400,7 @@ been known to work with versions of the EDG C++ compiler, and vendor-specific proprietary C++ compilers such as the Intel ICC C++ compiler. -

4.2.

+

4.2.

No 'long long' type on Solaris?

By default we try to support the C99 long long type. @@ -413,7 +412,7 @@ commonly reported platform affected was Solaris.

This has been fixed for libstdc++ releases greater than 3.0.3. -

4.3.

+

4.3.

_XOPEN_SOURCE and _GNU_SOURCE are always defined?

On Solaris, g++ (but not gcc) always defines the preprocessor macro _XOPEN_SOURCE. On GNU/Linux, the same happens @@ -442,13 +441,13 @@ quite a bit.

This method is something of a wart. We'd like to find a cleaner solution, but nobody yet has contributed the time. -

4.4.

+

4.4.

Mac OS X ctype.h is broken! How can I fix it?

This is a long-standing bug in the OS X support. Fortunately, the patch is quite simple, and well-known. Here's a link to the solution. -

4.5.

+

4.5.

Threading is broken on i386?

Support for atomic integer operations is/was broken on i386 @@ -458,7 +457,7 @@ on an i686, then you would encounter no problems. Only when actually running the code on a i386 will the problem appear.

This is fixed in 3.2.2. -

4.6.

+

4.6.

MIPS atomic operations

The atomic locking routines for MIPS targets requires MIPS II @@ -468,7 +467,7 @@

The mips*-*-linux* port continues to use the MIPS II routines, and more work in this area is expected. -

4.7.

+

4.7.

Recent GNU/Linux glibc required?

When running on GNU/Linux, libstdc++ 3.2.1 (shared library version 5.0.1) and later uses localization and formatting code from the system @@ -479,7 +478,7 @@

The guideline is simple: the more recent the C++ library, the more recent the C library. (This is also documented in the main GCC installation instructions.) -

4.8.

+

4.8.

Can't use wchar_t/wstring on FreeBSD

Older versions of FreeBSD's C library do not have sufficient @@ -498,7 +497,7 @@ Bugs in the ISO C++ language or library specification

5.3. Bugs in the compiler (gcc/g++) and not libstdc++ -

5.1.

+

5.1.

What works already?

Short answer: Pretty much everything works @@ -512,7 +511,7 @@ C++98, TR1, and C++11. -

5.2.

+

5.2.

Bugs in the ISO C++ language or library specification

Unfortunately, there are some. @@ -527,7 +526,7 @@ If you think you've discovered a new bug that is not listed, please post a message describing your problem to the author of the library issues list or the Usenet group comp.lang.c++.moderated. -

5.3.

+

5.3.

Bugs in the compiler (gcc/g++) and not libstdc++

On occasion, the compiler is wrong. Please be advised that this @@ -562,7 +561,7 @@ list::size() is O(n)!

6.9. Aw, that's easy to fix! -

6.1.

+

6.1.

Reopening a stream fails

One of the most-reported non-bug reports. Executing a sequence like: @@ -589,7 +588,7 @@ Update: for GCC 4.0 we implemented the resolution of DR #409 and open() now calls clear() on success! -

6.2.

+

6.2.

-Weffc++ complains too much

Many warnings are emitted when -Weffc++ is used. Making @@ -601,7 +600,7 @@ We do, however, try to have libstdc++ sources as clean as possible. If you see some simple changes that pacify -Weffc++ without other drawbacks, send us a patch. -

6.3.

+

6.3.

Ambiguous overloads after including an old-style header

Another problem is the rel_ops namespace and the template @@ -613,7 +612,7 @@ sums things up here. The collisions with vector/string iterator types have been fixed for 3.1. -

6.4.

+

6.4.

The g++-3 headers are not ours

If you are using headers in @@ -629,7 +628,7 @@ 'v'?). Starting with version 3.2 the headers are installed in ${prefix}/include/c++/${version} as this prevents headers from previous versions being found by mistake. -

6.5.

+

6.5.

Errors about *Concept and constraints in the STL

@@ -646,7 +645,7 @@ checks, is available in the Diagnostics. chapter of the manual. -

6.6.

+

6.6.

Program crashes when using library code in a dynamically-loaded library

@@ -665,7 +664,7 @@
    // link the executable
    g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl
-    

6.7.

+    

6.7.

“Memory leaks” in containers

A few people have reported that the standard containers appear @@ -678,13 +677,13 @@ want to test the library for memory leaks please read Tips for memory leak hunting first. -

6.8.

+

6.8.

list::size() is O(n)!

See the Containers chapter. -

6.9.

+

6.9.

Aw, that's easy to fix!

If you have found a bug in the library and you think you have @@ -717,7 +716,7 @@ What's an ABI and why is it so messy?

7.8. How do I make std::vector<T>::capacity() == std::vector<T>::size? -

7.1.

+

7.1.

string::iterator is not char*; vector<T>::iterator is not T*

If you have code that depends on container<T> iterators @@ -736,7 +735,7 @@ certain expressions to &*i. Future revisions of the Standard are expected to bless this usage for vector<> (but not for basic_string<>). -

7.2.

+

7.2.

What's next after libstdc++?

Hopefully, not much. The goal of libstdc++ is to produce a @@ -749,7 +748,7 @@ this effort is described in The C++ Library Technical Report 1. -

7.3.

+

7.3.

What about the STL from SGI?

The STL from SGI, @@ -772,11 +771,11 @@

The FAQ for SGI's STL (one jump off of their main page) is still recommended reading. -

7.4.

+

7.4.

Extensions and Backward Compatibility

See the link on backwards compatibility and link on evolution. -

7.5.

+

7.5.

Does libstdc++ support TR1?

Yes. @@ -788,7 +787,7 @@

The implementation status of TR1 in libstdc++ can be tracked on the TR1 status page. -

7.6.

How do I get a copy of the ISO C++ Standard? +

7.6.

How do I get a copy of the ISO C++ Standard?

Copies of the full ISO 14882 standard are available on line via the ISO mirror site for committee members. Non-members, or those @@ -807,7 +806,7 @@

The 2003 version of the standard (the 1998 version plus TC1) is available in print, ISBN 0-470-84674-7. -

7.7.

+

7.7.

What's an ABI and why is it so messy?

ABI stands for “Application Binary @@ -855,7 +854,7 @@ so they may later be changed. Deciding which, and implementing the decisions, must happen before you can reasonably document a candidate C++ ABI that encompasses the standard library. -

7.8.

+

7.8.

How do I make std::vector<T>::capacity() == std::vector<T>::size?

The standard idiom for deallocating a vector<T>'s @@ -868,4 +867,4 @@

See Shrink-to-fit strings for a similar solution for strings. -

+

\ No newline at end of file diff --git a/libstdc++-v3/doc/html/index.html b/libstdc++-v3/doc/html/index.html index 260ae73..4ae8a07 100644 --- a/libstdc++-v3/doc/html/index.html +++ b/libstdc++-v3/doc/html/index.html @@ -1,7 +1,6 @@ - -The GNU C++ Library

The GNU C++ Library

Short Contents

- Copyright 2008, 2009, 2011 +The GNU C++ Library

The GNU C++ Library

Short Contents

+ Copyright (C) 2008-2013 FSF

@@ -14,7 +13,7 @@ This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections.

-

+
E. GNU Free Documentation License
The GNU C++ Library API Reference
Frequently Asked Questions
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/abi.html b/libstdc++-v3/doc/html/manual/abi.html index 9e56e3d..8a9572a 100644 --- a/libstdc++-v3/doc/html/manual/abi.html +++ b/libstdc++-v3/doc/html/manual/abi.html @@ -1,10 +1,9 @@ - -ABI Policy and Guidelines

ABI Policy and Guidelines

+

The C++ Interface

C++ applications often depend on specific language support routines, say for throwing exceptions, or catching exceptions, and perhaps also depend on features in the C++ Standard Library. @@ -58,10 +57,10 @@ given compiler ABI. In a nutshell: To use a specific version of the C++ ABI, one must use a corresponding GNU C++ toolchain (i.e., g++ and libstdc++) that implements the C++ ABI in question. -

Versioning

The C++ interface has evolved throughout the history of the GNU +

Versioning

The C++ interface has evolved throughout the history of the GNU C++ toolchain. With each release, various details have been changed so as to give distinct versions to the C++ interface. -

Goals

Extending existing, stable ABIs. Versioning gives subsequent +

Goals

Extending existing, stable ABIs. Versioning gives subsequent releases of library binaries the ability to add new symbols and add functionality, all the while retaining compatibility with the previous releases in the series. Thus, program binaries linked with the initial @@ -75,7 +74,7 @@ binary in a release series (with additional symbols added), substitute in the initial release of the library binary, and remain link compatible.

Allows multiple, incompatible ABIs to coexist at the same time. -

History

+

History

How can this complexity be managed? What does C++ versioning mean? Because library and compiler changes often make binaries compiled with one version of the GNU tools incompatible with binaries @@ -87,9 +86,9 @@ compatible.

  1. Release versioning on the libgcc_s.so binary.

    This is implemented via file names and the ELF DT_SONAME mechanism (at least on ELF systems). It is versioned as follows: -

    • GCC 3.x: libgcc_s.so.1

    • GCC 4.x: libgcc_s.so.1

    For m68k-linux the versions differ as follows:

    • GCC 3.4, GCC 4.x: libgcc_s.so.1 +

      • GCC 3.x: libgcc_s.so.1

      • GCC 4.x: libgcc_s.so.1

      For m68k-linux the versions differ as follows:

      • GCC 3.4, GCC 4.x: libgcc_s.so.1 when configuring --with-sjlj-exceptions, or - libgcc_s.so.2

      For hppa-linux the versions differ as follows:

      • GCC 3.4, GCC 4.[0-1]: either libgcc_s.so.1 + libgcc_s.so.2

      For hppa-linux the versions differ as follows:

      • GCC 3.4, GCC 4.[0-1]: either libgcc_s.so.1 when configuring --with-sjlj-exceptions, or libgcc_s.so.2

      • GCC 4.[2-7]: either libgcc_s.so.3 when configuring --with-sjlj-exceptions) or libgcc_s.so.4 @@ -97,7 +96,7 @@ compatible. definitions, where the version definition is the maximum for a particular release. Labels are cumulative. If a particular release is not listed, it has the same version labels as the preceding - release.

        This corresponds to the mapfile: gcc/libgcc-std.ver

        • GCC 3.0.0: GCC_3.0

        • GCC 3.3.0: GCC_3.3

        • GCC 3.3.1: GCC_3.3.1

        • GCC 3.3.2: GCC_3.3.2

        • GCC 3.3.4: GCC_3.3.4

        • GCC 3.4.0: GCC_3.4

        • GCC 3.4.2: GCC_3.4.2

        • GCC 3.4.4: GCC_3.4.4

        • GCC 4.0.0: GCC_4.0.0

        • GCC 4.1.0: GCC_4.1.0

        • GCC 4.2.0: GCC_4.2.0

        • GCC 4.3.0: GCC_4.3.0

        • GCC 4.4.0: GCC_4.4.0

        • GCC 4.5.0: GCC_4.5.0

        • GCC 4.6.0: GCC_4.6.0

        • GCC 4.7.0: GCC_4.7.0

      • + release.

        This corresponds to the mapfile: gcc/libgcc-std.ver

        • GCC 3.0.0: GCC_3.0

        • GCC 3.3.0: GCC_3.3

        • GCC 3.3.1: GCC_3.3.1

        • GCC 3.3.2: GCC_3.3.2

        • GCC 3.3.4: GCC_3.3.4

        • GCC 3.4.0: GCC_3.4

        • GCC 3.4.2: GCC_3.4.2

        • GCC 3.4.4: GCC_3.4.4

        • GCC 4.0.0: GCC_4.0.0

        • GCC 4.1.0: GCC_4.1.0

        • GCC 4.2.0: GCC_4.2.0

        • GCC 4.3.0: GCC_4.3.0

        • GCC 4.4.0: GCC_4.4.0

        • GCC 4.5.0: GCC_4.5.0

        • GCC 4.6.0: GCC_4.6.0

        • GCC 4.7.0: GCC_4.7.0

      • Release versioning on the libstdc++.so binary, implemented in the same way as the libgcc_s.so binary above. Listed is the filename: DT_SONAME can be deduced from @@ -112,7 +111,7 @@ compatible. has the same filename and DT_SONAME as the preceding release.

        It is versioned as follows: -

        • GCC 3.0.0: libstdc++.so.3.0.0

        • GCC 3.0.1: libstdc++.so.3.0.1

        • GCC 3.0.2: libstdc++.so.3.0.2

        • GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)

        • GCC 3.0.4: libstdc++.so.3.0.4

        • GCC 3.1.0: libstdc++.so.4.0.0 (Incompatible with previous)

        • GCC 3.1.1: libstdc++.so.4.0.1

        • GCC 3.2.0: libstdc++.so.5.0.0 (Incompatible with previous)

        • GCC 3.2.1: libstdc++.so.5.0.1

        • GCC 3.2.2: libstdc++.so.5.0.2

        • GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)

        • GCC 3.3.0: libstdc++.so.5.0.4

        • GCC 3.3.1: libstdc++.so.5.0.5

        • GCC 3.4.0: libstdc++.so.6.0.0 (Incompatible with previous)

        • GCC 3.4.1: libstdc++.so.6.0.1

        • GCC 3.4.2: libstdc++.so.6.0.2

        • GCC 3.4.3: libstdc++.so.6.0.3

        • GCC 4.0.0: libstdc++.so.6.0.4

        • GCC 4.0.1: libstdc++.so.6.0.5

        • GCC 4.0.2: libstdc++.so.6.0.6

        • GCC 4.0.3: libstdc++.so.6.0.7

        • GCC 4.1.0: libstdc++.so.6.0.7

        • GCC 4.1.1: libstdc++.so.6.0.8

        • GCC 4.2.0: libstdc++.so.6.0.9

        • GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)

        • GCC 4.2.2: libstdc++.so.6.0.9

        • GCC 4.3.0: libstdc++.so.6.0.10

        • GCC 4.4.0: libstdc++.so.6.0.11

        • GCC 4.4.1: libstdc++.so.6.0.12

        • GCC 4.4.2: libstdc++.so.6.0.13

        • GCC 4.5.0: libstdc++.so.6.0.14

        • GCC 4.6.0: libstdc++.so.6.0.15

        • GCC 4.6.1: libstdc++.so.6.0.16

        +

        • GCC 3.0.0: libstdc++.so.3.0.0

        • GCC 3.0.1: libstdc++.so.3.0.1

        • GCC 3.0.2: libstdc++.so.3.0.2

        • GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)

        • GCC 3.0.4: libstdc++.so.3.0.4

        • GCC 3.1.0: libstdc++.so.4.0.0 (Incompatible with previous)

        • GCC 3.1.1: libstdc++.so.4.0.1

        • GCC 3.2.0: libstdc++.so.5.0.0 (Incompatible with previous)

        • GCC 3.2.1: libstdc++.so.5.0.1

        • GCC 3.2.2: libstdc++.so.5.0.2

        • GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)

        • GCC 3.3.0: libstdc++.so.5.0.4

        • GCC 3.3.1: libstdc++.so.5.0.5

        • GCC 3.4.0: libstdc++.so.6.0.0 (Incompatible with previous)

        • GCC 3.4.1: libstdc++.so.6.0.1

        • GCC 3.4.2: libstdc++.so.6.0.2

        • GCC 3.4.3: libstdc++.so.6.0.3

        • GCC 4.0.0: libstdc++.so.6.0.4

        • GCC 4.0.1: libstdc++.so.6.0.5

        • GCC 4.0.2: libstdc++.so.6.0.6

        • GCC 4.0.3: libstdc++.so.6.0.7

        • GCC 4.1.0: libstdc++.so.6.0.7

        • GCC 4.1.1: libstdc++.so.6.0.8

        • GCC 4.2.0: libstdc++.so.6.0.9

        • GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)

        • GCC 4.2.2: libstdc++.so.6.0.9

        • GCC 4.3.0: libstdc++.so.6.0.10

        • GCC 4.4.0: libstdc++.so.6.0.11

        • GCC 4.4.1: libstdc++.so.6.0.12

        • GCC 4.4.2: libstdc++.so.6.0.13

        • GCC 4.5.0: libstdc++.so.6.0.14

        • GCC 4.6.0: libstdc++.so.6.0.15

        • GCC 4.6.1: libstdc++.so.6.0.16

        • GCC 4.7.0: libstdc++.so.6.0.17

        • GCC 4.8.0: libstdc++.so.6.0.18

        Note 1: Error should be libstdc++.so.3.0.3.

        Note 2: Not strictly required. @@ -130,7 +129,7 @@ compatible. GLIBCPP_3.2 for symbols that were introduced in the GCC 3.2.0 release.) If a particular release is not listed, it has the same version labels as the preceding release. -

        • GCC 3.0.0: (Error, not versioned)

        • GCC 3.0.1: (Error, not versioned)

        • GCC 3.0.2: (Error, not versioned)

        • GCC 3.0.3: (Error, not versioned)

        • GCC 3.0.4: (Error, not versioned)

        • GCC 3.1.0: GLIBCPP_3.1, CXXABI_1

        • GCC 3.1.1: GLIBCPP_3.1, CXXABI_1

        • GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2

        • GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2

        • GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2

        • GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2

        • GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1

        • GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1

        • GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1

        • GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1

        • GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3

        • GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3

        • GCC 3.4.2: GLIBCXX_3.4.2

        • GCC 3.4.3: GLIBCXX_3.4.3

        • GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1

        • GCC 4.0.1: GLIBCXX_3.4.5

        • GCC 4.0.2: GLIBCXX_3.4.6

        • GCC 4.0.3: GLIBCXX_3.4.7

        • GCC 4.1.1: GLIBCXX_3.4.8

        • GCC 4.2.0: GLIBCXX_3.4.9

        • GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2

        • GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3

        • GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3

        • GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3

        • GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4

        • GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5

        • GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5

      • Incremental bumping of a compiler pre-defined macro, +

        • GCC 3.0.0: (Error, not versioned)

        • GCC 3.0.1: (Error, not versioned)

        • GCC 3.0.2: (Error, not versioned)

        • GCC 3.0.3: (Error, not versioned)

        • GCC 3.0.4: (Error, not versioned)

        • GCC 3.1.0: GLIBCPP_3.1, CXXABI_1

        • GCC 3.1.1: GLIBCPP_3.1, CXXABI_1

        • GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2

        • GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2

        • GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2

        • GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2

        • GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1

        • GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1

        • GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1

        • GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1

        • GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3

        • GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3

        • GCC 3.4.2: GLIBCXX_3.4.2

        • GCC 3.4.3: GLIBCXX_3.4.3

        • GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1

        • GCC 4.0.1: GLIBCXX_3.4.5

        • GCC 4.0.2: GLIBCXX_3.4.6

        • GCC 4.0.3: GLIBCXX_3.4.7

        • GCC 4.1.1: GLIBCXX_3.4.8

        • GCC 4.2.0: GLIBCXX_3.4.9

        • GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2

        • GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3

        • GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3

        • GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3

        • GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4

        • GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5

        • GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5

        • GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6

        • GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7

      • Incremental bumping of a compiler pre-defined macro, __GXX_ABI_VERSION. This macro is defined as the version of the compiler v3 ABI, with g++ 3.0 being version 100. This macro will be automatically defined whenever g++ is used (the curious can @@ -142,11 +141,11 @@ compatible. '-fabi-version' command line option.

        It is versioned as follows, where 'n' is given by '-fabi-version=n': -

        • GCC 3.0: 100

        • GCC 3.1: 100 (Error, should be 101)

        • GCC 3.2: 102

        • GCC 3.3: 102

        • GCC 3.4, GCC 4.x: 102 (when n=1)

        • GCC 3.4, GCC 4.x: 1000 + n (when n>1)

        • GCC 3.4, GCC 4.x: 999999 (when n=0)

      • Changes to the default compiler option for +

        • GCC 3.0: 100

        • GCC 3.1: 100 (Error, should be 101)

        • GCC 3.2: 102

        • GCC 3.3: 102

        • GCC 3.4, GCC 4.x: 102 (when n=1)

        • GCC 3.4, GCC 4.x: 1000 + n (when n>1)

        • GCC 3.4, GCC 4.x: 999999 (when n=0)

      • Changes to the default compiler option for -fabi-version.

        It is versioned as follows: -

        • GCC 3.0: (Error, not versioned)

        • GCC 3.1: (Error, not versioned)

        • GCC 3.2: -fabi-version=1

        • GCC 3.3: -fabi-version=1

        • GCC 3.4, GCC 4.x: -fabi-version=2 (Incompatible with previous)

      • Incremental bumping of a library pre-defined macro. For releases +

        • GCC 3.0: (Error, not versioned)

        • GCC 3.1: (Error, not versioned)

        • GCC 3.2: -fabi-version=1

        • GCC 3.3: -fabi-version=1

        • GCC 3.4, GCC 4.x: -fabi-version=2 (Incompatible with previous)

      • Incremental bumping of a library pre-defined macro. For releases before 3.4.0, the macro is __GLIBCPP__. For later releases, it's __GLIBCXX__. (The libstdc++ project generously changed from CPP to CXX throughout its source to allow the "C" pre-processor the CPP @@ -159,7 +158,7 @@ compatible. the same value as gcc/DATESTAMP.)

        It is versioned as follows: -

        • GCC 3.0.0: 20010615

        • GCC 3.0.1: 20010819

        • GCC 3.0.2: 20011023

        • GCC 3.0.3: 20011220

        • GCC 3.0.4: 20020220

        • GCC 3.1.0: 20020514

        • GCC 3.1.1: 20020725

        • GCC 3.2.0: 20020814

        • GCC 3.2.1: 20021119

        • GCC 3.2.2: 20030205

        • GCC 3.2.3: 20030422

        • GCC 3.3.0: 20030513

        • GCC 3.3.1: 20030804

        • GCC 3.3.2: 20031016

        • GCC 3.3.3: 20040214

        • GCC 3.4.0: 20040419

        • GCC 3.4.1: 20040701

        • GCC 3.4.2: 20040906

        • GCC 3.4.3: 20041105

        • GCC 3.4.4: 20050519

        • GCC 3.4.5: 20051201

        • GCC 3.4.6: 20060306

        • GCC 4.0.0: 20050421

        • GCC 4.0.1: 20050707

        • GCC 4.0.2: 20050921

        • GCC 4.0.3: 20060309

        • GCC 4.1.0: 20060228

        • GCC 4.1.1: 20060524

        • GCC 4.1.2: 20070214

        • GCC 4.2.0: 20070514

        • GCC 4.2.1: 20070719

        • GCC 4.2.2: 20071007

        • GCC 4.2.3: 20080201

        • GCC 4.2.4: 20080519

        • GCC 4.3.0: 20080306

        • GCC 4.3.1: 20080606

        • GCC 4.3.2: 20080827

        • GCC 4.3.3: 20090124

        • GCC 4.3.4: 20090804

        • GCC 4.3.5: 20100522

        • GCC 4.3.6: 20110627

        • GCC 4.4.0: 20090421

        • GCC 4.4.1: 20090722

        • GCC 4.4.2: 20091015

        • GCC 4.4.3: 20100121

        • GCC 4.4.4: 20100429

        • GCC 4.4.5: 20101001

        • GCC 4.4.6: 20110416

        • GCC 4.5.0: 20100414

        • GCC 4.5.1: 20100731

        • GCC 4.5.2: 20101216

        • GCC 4.5.3: 20110428

        • GCC 4.6.0: 20110325

        • GCC 4.6.1: 20110627

        • GCC 4.6.2: 20111026

      • +

        • GCC 3.0.0: 20010615

        • GCC 3.0.1: 20010819

        • GCC 3.0.2: 20011023

        • GCC 3.0.3: 20011220

        • GCC 3.0.4: 20020220

        • GCC 3.1.0: 20020514

        • GCC 3.1.1: 20020725

        • GCC 3.2.0: 20020814

        • GCC 3.2.1: 20021119

        • GCC 3.2.2: 20030205

        • GCC 3.2.3: 20030422

        • GCC 3.3.0: 20030513

        • GCC 3.3.1: 20030804

        • GCC 3.3.2: 20031016

        • GCC 3.3.3: 20040214

        • GCC 3.4.0: 20040419

        • GCC 3.4.1: 20040701

        • GCC 3.4.2: 20040906

        • GCC 3.4.3: 20041105

        • GCC 3.4.4: 20050519

        • GCC 3.4.5: 20051201

        • GCC 3.4.6: 20060306

        • GCC 4.0.0: 20050421

        • GCC 4.0.1: 20050707

        • GCC 4.0.2: 20050921

        • GCC 4.0.3: 20060309

        • GCC 4.1.0: 20060228

        • GCC 4.1.1: 20060524

        • GCC 4.1.2: 20070214

        • GCC 4.2.0: 20070514

        • GCC 4.2.1: 20070719

        • GCC 4.2.2: 20071007

        • GCC 4.2.3: 20080201

        • GCC 4.2.4: 20080519

        • GCC 4.3.0: 20080306

        • GCC 4.3.1: 20080606

        • GCC 4.3.2: 20080827

        • GCC 4.3.3: 20090124

        • GCC 4.3.4: 20090804

        • GCC 4.3.5: 20100522

        • GCC 4.3.6: 20110627

        • GCC 4.4.0: 20090421

        • GCC 4.4.1: 20090722

        • GCC 4.4.2: 20091015

        • GCC 4.4.3: 20100121

        • GCC 4.4.4: 20100429

        • GCC 4.4.5: 20101001

        • GCC 4.4.6: 20110416

        • GCC 4.4.7: 20120313

        • GCC 4.5.0: 20100414

        • GCC 4.5.1: 20100731

        • GCC 4.5.2: 20101216

        • GCC 4.5.3: 20110428

        • GCC 4.5.4: 20120702

        • GCC 4.6.0: 20110325

        • GCC 4.6.1: 20110627

        • GCC 4.6.2: 20111026

        • GCC 4.6.3: 20120301

        • GCC 4.7.0: 20120322

        • GCC 4.7.1: 20120614

        • GCC 4.7.2: 20120920

      • Incremental bumping of a library pre-defined macro, _GLIBCPP_VERSION. This macro is defined as the released version of the library, as a string literal. This is only implemented in @@ -172,7 +171,7 @@ compatible. of config.h.

        It is versioned as follows: -

        • GCC 3.0.0: "3.0.0"

        • GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")

        • GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")

        • GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")

        • GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")

        • GCC 3.1.0: "3.1.0"

        • GCC 3.1.1: "3.1.1"

        • GCC 3.2.0: "3.2"

        • GCC 3.2.1: "3.2.1"

        • GCC 3.2.2: "3.2.2"

        • GCC 3.2.3: "3.2.3"

        • GCC 3.3.0: "3.3"

        • GCC 3.3.1: "3.3.1"

        • GCC 3.3.2: "3.3.2"

        • GCC 3.3.3: "3.3.3"

        • GCC 3.4: "version-unused"

        • GCC 4.x: "version-unused"

      • +

        • GCC 3.0.0: "3.0.0"

        • GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")

        • GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")

        • GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")

        • GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")

        • GCC 3.1.0: "3.1.0"

        • GCC 3.1.1: "3.1.1"

        • GCC 3.2.0: "3.2"

        • GCC 3.2.1: "3.2.1"

        • GCC 3.2.2: "3.2.2"

        • GCC 3.2.3: "3.2.3"

        • GCC 3.3.0: "3.3"

        • GCC 3.3.1: "3.3.1"

        • GCC 3.3.2: "3.3.2"

        • GCC 3.3.3: "3.3.3"

        • GCC 3.4: "version-unused"

        • GCC 4.x: "version-unused"

      • Matching each specific C++ compiler release to a specific set of C++ include files. This is only implemented in GCC 3.1.1 releases and higher. @@ -185,13 +184,13 @@ compatible. file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before GCC 3.4.0).

        C++ includes are versioned as follows: -

        • GCC 3.0.0: include/g++-v3

        • GCC 3.0.1: include/g++-v3

        • GCC 3.0.2: include/g++-v3

        • GCC 3.0.3: include/g++-v3

        • GCC 3.0.4: include/g++-v3

        • GCC 3.1.0: include/g++-v3

        • GCC 3.1.1: include/c++/3.1.1

        • GCC 3.2.0: include/c++/3.2

        • GCC 3.2.1: include/c++/3.2.1

        • GCC 3.2.2: include/c++/3.2.2

        • GCC 3.2.3: include/c++/3.2.3

        • GCC 3.3.0: include/c++/3.3

        • GCC 3.3.1: include/c++/3.3.1

        • GCC 3.3.2: include/c++/3.3.2

        • GCC 3.3.3: include/c++/3.3.3

        • GCC 3.4.x: include/c++/3.4.x

        • GCC 4.x.y: include/c++/4.x.y

+

  • GCC 3.0.0: include/g++-v3

  • GCC 3.0.1: include/g++-v3

  • GCC 3.0.2: include/g++-v3

  • GCC 3.0.3: include/g++-v3

  • GCC 3.0.4: include/g++-v3

  • GCC 3.1.0: include/g++-v3

  • GCC 3.1.1: include/c++/3.1.1

  • GCC 3.2.0: include/c++/3.2

  • GCC 3.2.1: include/c++/3.2.1

  • GCC 3.2.2: include/c++/3.2.2

  • GCC 3.2.3: include/c++/3.2.3

  • GCC 3.3.0: include/c++/3.3

  • GCC 3.3.1: include/c++/3.3.1

  • GCC 3.3.2: include/c++/3.3.2

  • GCC 3.3.3: include/c++/3.3.3

  • GCC 3.4.x: include/c++/3.4.x

  • GCC 4.x.y: include/c++/4.x.y

Taken together, these techniques can accurately specify interface and implementation changes in the GNU C++ tools themselves. Used properly, they allow both the GNU C++ tools implementation, and programs using them, an evolving yet controlled development that maintains backward compatibility. -

Prerequisites

+

Prerequisites

Minimum environment that supports a versioned ABI: A supported dynamic linker, a GNU linker of sufficient vintage to understand demangled C++ name globbing (ld) or the Sun linker, a shared @@ -206,7 +205,7 @@ compatible. Most modern GNU/Linux and BSD versions, particularly ones using GCC 3.1 and later, will meet the requirements above, as does Solaris 2.5 and up. -

Configuring

+

Configuring

It turns out that most of the configure options that change default behavior will impact the mangled names of exported symbols, and thus impact versioning and compatibility. @@ -224,7 +223,7 @@ compatible. attempts to make sure that all the requirement for symbol versioning are in place. For more information, please consult acinclude.m4. -

Checking Active

+

Checking Active

When the GNU C++ library is being built with symbol versioning on, you should see the following at configure time for libstdc++: @@ -272,12 +271,12 @@ On Solaris 2, you can use pvs -r instead: libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);

ldd -v works too, but is very verbose. -

Allowed Changes

+

Allowed Changes

The following will cause the library minor version number to increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".

  1. Adding an exported global or static data member

  2. Adding an exported function, static or non-virtual member function

  3. Adding an exported symbol or symbols by additional instantiations

Other allowed changes are possible. -

Prohibited Changes

+

Prohibited Changes

The following non-exhaustive list will cause the library major version number to increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.4.0.0". @@ -296,13 +295,13 @@ class in registers, the compiler will be forced to use memory. See the section on Function Calling Conventions and APIs of the C++ ABI documentation for further details. -

Implementation

  1. +

Implementation

  1. Separation of interface and implementation

    This is accomplished by two techniques that separate the API from the ABI: forcing undefined references to link against a library binary for definitions. -

    Include files have declarations, source files have defines

    +

    Include files have declarations, source files have defines

    For non-templatized types, such as much of class locale, the appropriate standard C++ include, say locale, can contain full declarations, while @@ -336,7 +335,7 @@ Calling Conventions and APIs performance by the underlying dynamic loading mechanism. In addition, they have the possibility of changing without impacting ABI compatibility. -

    The following namespaces are transformed by the mapfile:

    namespace std

    Defaults to exporting all symbols in label +

    The following namespaces are transformed by the mapfile:

    namespace std

    Defaults to exporting all symbols in label GLIBCXX that do not begin with an underscore, i.e., __test_func would not be exported by default. Select exceptional symbols are allowed to be visible.

    namespace __gnu_cxx

    Defaults to not exporting any symbols in label @@ -344,7 +343,7 @@ exceptional symbols are allowed to be visible.

    CXXABI, select items are allowed to be visible.

  2. Freezing the API

    Disallowed changes, as above, are not made on a stable release branch. Enforcement tends to be less strict with GNU extensions that -standard includes.

Testing

Single ABI Testing

+standard includes.

Testing

Single ABI Testing

Testing for GNU C++ ABI changes is composed of two distinct areas: testing the C++ compiler (g++) for compiler changes, and testing the C++ library (libstdc++) for library changes. @@ -410,7 +409,7 @@ and other detailed data is not displayed with this flag.

Perhaps there are other C++ ABI checkers. If so, please notify us. We'd like to know about them! -

Multiple ABI Testing

+

Multiple ABI Testing

A "C" application, dynamically linked to two shared libraries, liba, libb. The dependent library liba is a C++ shared library compiled with GCC 3.3, and uses io, exceptions, locale, etc. The dependent library @@ -473,7 +472,7 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so. This resulting binary, when executed, will be able to safely use code from both liba, and the dependent libstdc++.so.6, and libb, with the dependent libstdc++.so.5. -

Outstanding Issues

+

Outstanding Issues

Some features in the C++ language make versioning especially difficult. In particular, compiler generated constructs such as implicit instantiations for templates, typeinfo information, and @@ -486,51 +485,51 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so. 24660: versioning weak symbols in libstdc++

19664: libstdc++ headers should have pop/push of the visibility around the declarations -

Bibliography

[biblio.abicheck] +

Bibliography

[biblio.abicheck] ABIcheck - .

[biblio.cxxabi] + .

[biblio.cxxabi] C++ ABI Summary - .

+ .

+ .

+ .

+ .

+ . Ulrich Drepper.

+ .

Dynamic Shared Objects: Survey and Issues . ISO C++ J16/06-0046 - . Benjamin Kosnik.

+ . Benjamin Kosnik.

Versioning With Namespaces . ISO C++ J16/06-0083 - . Benjamin Kosnik.

+ . Benjamin Kosnik.

+ . Pavel Shved. Denis Silakov.

\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/algorithms.html b/libstdc++-v3/doc/html/manual/algorithms.html index b688d07..25f1628 100644 --- a/libstdc++-v3/doc/html/manual/algorithms.html +++ b/libstdc++-v3/doc/html/manual/algorithms.html @@ -1,13 +1,12 @@ - -Chapter 11.  Algorithms

Chapter 11.  Algorithms - +

The neatest accomplishment of the algorithms section is that all the work is done via iterators, not containers directly. This means two @@ -42,7 +41,7 @@ to cause so much confusion. Once you get range into your head (it's not that hard, honest!), then the algorithms are a cakewalk. -

Mutating

swap

Specializations

If you call std::swap(x,y); where x and y are standard +

Mutating

swap

Specializations

If you call std::swap(x,y); where x and y are standard containers, then the call will automatically be replaced by a call to x.swap(y); instead.

This allows member functions of each container class to take over, and @@ -58,4 +57,4 @@  Home Chapter 12.  Numerics -

+
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html index 3cb5934..6fe5d55 100644 --- a/libstdc++-v3/doc/html/manual/api.html +++ b/libstdc++-v3/doc/html/manual/api.html @@ -1,11 +1,10 @@ - -API Evolution and Deprecation History

API Evolution and Deprecation History

A list of user-visible changes, in chronological order -

3.0

+

3.0

Extensions moved to include/ext.

Include files from the SGI/HP sources that pre-date the ISO standard @@ -14,7 +13,7 @@ the include/backward directory and a deprecated wa is added that notifies on inclusion (-Wno-deprecated deactivates the warning.)

Deprecated include backward/strstream added.

Removal of include builtinbuf.h, indstream.h, parsestream.h, PlotFile.h, SFile.h, stdiostream.h, and stream.h. -

3.1

+

3.1

Extensions from SGI/HP moved from namespace std to namespace __gnu_cxx. As part of this, the following @@ -26,7 +25,7 @@ Extensions to basic_filebuf introduced: ext/rb_tree.

Removal of ext/tree, moved to backward/tree.h. -

3.2

+

3.2

Symbol versioning introduced for shared library.

Removal of include backward/strstream.h.

Allocator changes. Change __malloc_alloc to malloc_allocator and __new_alloc to new_allocator.

For GCC releases from 2.95 through the 3.1 series, defining __USE_MALLOC on the gcc command line would change the default allocation strategy to instead use malloc and @@ -36,8 +35,8 @@ Removal of ext/tree, moved to GLIBCXX_FORCE_NEW in the environment, see the mt allocator chapter for details. -

Error handling in iostreams cleaned up, made consistent.

3.3

-

3.4

+

Error handling in iostreams cleaned up, made consistent.

3.3

+

3.4

Large file support.

Extensions for generic characters and char_traits added in ext/pod_char_traits.h. @@ -78,11 +77,11 @@ _Alloc_traits have been removed. __alloc to select an underlying allocator that satisfied memory allocation requests. The selection of this underlying allocator was not user-configurable. -

Table B.6. Extension Allocators

Allocator (3.4)Header (3.4)Allocator (3.[0-3])Header (3.[0-3])
__gnu_cxx::new_allocator<T>ext/new_allocator.hstd::__new_allocmemory
__gnu_cxx::malloc_allocator<T>ext/malloc_allocator.hstd::__malloc_alloc_template<int>memory
__gnu_cxx::debug_allocator<T>ext/debug_allocator.hstd::debug_alloc<T>memory
__gnu_cxx::__pool_alloc<T>ext/pool_allocator.hstd::__default_alloc_template<bool,int>memory
__gnu_cxx::__mt_alloc<T>ext/mt_allocator.h
__gnu_cxx::bitmap_allocator<T>ext/bitmap_allocator.h

Releases after gcc-3.4 have continued to add to the collection +

Table B.6. Extension Allocators

Allocator (3.4)Header (3.4)Allocator (3.[0-3])Header (3.[0-3])
__gnu_cxx::new_allocator<T>ext/new_allocator.hstd::__new_allocmemory
__gnu_cxx::malloc_allocator<T>ext/malloc_allocator.hstd::__malloc_alloc_template<int>memory
__gnu_cxx::debug_allocator<T>ext/debug_allocator.hstd::debug_alloc<T>memory
__gnu_cxx::__pool_alloc<T>ext/pool_allocator.hstd::__default_alloc_template<bool,int>memory
__gnu_cxx::__mt_alloc<T>ext/mt_allocator.h
__gnu_cxx::bitmap_allocator<T>ext/bitmap_allocator.h

Releases after gcc-3.4 have continued to add to the collection of available allocators. All of these new allocators are standard-style. The following table includes details, along with the first released version of GCC that included the extension allocator. -

Table B.7. Extension Allocators Continued

AllocatorIncludeVersion
__gnu_cxx::array_allocator<T>ext/array_allocator.h4.0.0
__gnu_cxx::throw_allocator<T>ext/throw_allocator.h4.2.0

+

Table B.7. Extension Allocators Continued

AllocatorIncludeVersion
__gnu_cxx::array_allocator<T>ext/array_allocator.h4.0.0
__gnu_cxx::throw_allocator<T>ext/throw_allocator.h4.2.0

Debug mode first appears.

Precompiled header support PCH support. @@ -92,7 +91,7 @@ Macro guard for changed, from _GLIBCPP_ to ext/stdio_sync_filebuf.h added.

Extension ext/demangle.h added. -

4.0

+

4.0

TR1 features first appear.

@@ -101,14 +100,14 @@ Extension allocator ext/array_allocator.h added. Extension codecvt specializations moved to ext/codecvt_specializations.h.

Removal of ext/demangle.h. -

4.1

+

4.1

Removal of cassert from all standard headers: now has to be explicitly included for std::assert calls.

Extensions for policy-based data structures first added. New includes, types, namespace pb_assoc.

Extensions for typelists added in ext/typelist.h.

Extension for policy-based basic_string first added: __gnu_cxx::__versa_string in ext/vstring.h. -

4.2

+

4.2

Default visibility attributes applied to namespace std. Support for -fvisibility.

TR1 random, complex, and C compatibility headers added.

Extensions for concurrent programming consolidated into ext/concurrence.h and ext/atomicity.h, @@ -123,13 +122,13 @@ types, namespace moved to __pb_ds. std::__debug and extensions in namespace __gnu_cxx::__debug.

Extensions added: ext/typelist.h and ext/throw_allocator.h. -

4.3

+

4.3

C++0X features first appear.

TR1 regex and cmath's mathematical special function added.

Backward include edit. -

  • Removed

    +

    • Removed

      algobase.h algo.h alloc.h bvector.h complex.h defalloc.h deque.h fstream.h function.h hash_map.h hash_set.h hashtable.h heap.h iomanip.h iostream.h istream.h iterator.h @@ -141,7 +140,7 @@ Backward include edit. auto_ptr.h and binders.h

    Header dependency streamlining. -

    • algorithm no longer includes climits, cstring, or iosfwd

    • bitset no longer includes istream or ostream, adds iosfwd

    • functional no longer includes cstddef

    • iomanip no longer includes istream, istream, or functional, adds ioswd

    • numeric no longer includes iterator

    • string no longer includes algorithm or memory

    • valarray no longer includes numeric or cstdlib

    • tr1/hashtable no longer includes memory or functional

    • tr1/memory no longer includes algorithm

    • tr1/random no longer includes algorithm or fstream

    +

    • algorithm no longer includes climits, cstring, or iosfwd

    • bitset no longer includes istream or ostream, adds iosfwd

    • functional no longer includes cstddef

    • iomanip no longer includes istream, istream, or functional, adds ioswd

    • numeric no longer includes iterator

    • string no longer includes algorithm or memory

    • valarray no longer includes numeric or cstdlib

    • tr1/hashtable no longer includes memory or functional

    • tr1/memory no longer includes algorithm

    • tr1/random no longer includes algorithm or fstream

    Debug mode for unordered_map and unordered_set.

    Parallel mode first appears. @@ -155,10 +154,10 @@ Parallel mode first appears. PCH binary files no longer installed. Instead, the source files are installed.

    Namespace pb_ds moved to __gnu_pb_ds. -

4.4

+

4.4

C++0X features. -

  • +

    • Added.

      atomic, @@ -210,10 +209,10 @@ and ext/extptr_allocator.h. Support for non-standard pointer types has been added to vector and forward_list. -

    4.5

    +

    4.5

    C++0X features. -

    • +

      • Added.

        functional, @@ -240,4 +239,4 @@ The default behavior for comparing typeinfo names changed, so in typeinfo, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.

        Extensions modified: ext/throw_allocator.h. -

    +

\ 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 64f7d8d..f1525fe 100644 --- a/libstdc++-v3/doc/html/manual/appendix.html +++ b/libstdc++-v3/doc/html/manual/appendix.html @@ -1,8 +1,7 @@ - -Part IV.  Appendices +
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/appendix_contributing.html b/libstdc++-v3/doc/html/manual/appendix_contributing.html index 6571fb4..6593938 100644 --- a/libstdc++-v3/doc/html/manual/appendix_contributing.html +++ b/libstdc++-v3/doc/html/manual/appendix_contributing.html @@ -1,19 +1,18 @@ - -Appendix A.  Contributing

Contributing - +

The GNU C++ Library follows an open development model. Active contributors are assigned maintainer-ship responsibility, and given write access to the source repository. First time contributors should follow this procedure: -

Contributor Checklist

Reading

  • +

    Contributor Checklist

    Reading

    • Get and read the relevant sections of the C++ language specification. Copies of the full ISO 14882 standard are available on line via the ISO mirror site for committee @@ -48,7 +47,7 @@ And last but certainly not least, read the library-specific information found in Porting and Maintenance. -

    Assignment

    +

Assignment

Small changes can be accepted without a copyright assignment form on file. New code and additions to the library need completed copyright assignment form on file at the FSF. Note: your employer may be required @@ -75,14 +74,14 @@ requesting an assignment form from , please cc the libstdc++ maintainer above so that progress can be monitored. -

Getting Sources

+

Submitting Patches

+

Submitting Patches

Every patch must have several pieces of information before it can be properly evaluated. Ideally (and to ensure the fastest possible response from the maintainers) it would have all of these pieces: -

  • +

    • A description of the bug and how your patch fixes this bug. For new features a description of the feature and your implementation. @@ -113,4 +112,4 @@ libstdc++ mailing list.

+ Home Directory Layout and Source Conventions
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/appendix_free.html b/libstdc++-v3/doc/html/manual/appendix_free.html index 6c2398c..aa44a4f 100644 --- a/libstdc++-v3/doc/html/manual/appendix_free.html +++ b/libstdc++-v3/doc/html/manual/appendix_free.html @@ -1,13 +1,12 @@ - -Appendix C.  Free Software Needs Free Documentation

Free Software Needs Free Documentation - +

The biggest deficiency in free operating systems is not in the software--it is the lack of good free manuals that we can include in @@ -123,4 +122,4 @@ that lists free books available from other publishers]. permitted worldwide, without royalty, in any medium, provided this notice is preserved.

Report any problems or suggestions to .

+
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/appendix_gfdl.html b/libstdc++-v3/doc/html/manual/appendix_gfdl.html index 8e1d4e8..641c585 100644 --- a/libstdc++-v3/doc/html/manual/appendix_gfdl.html +++ b/libstdc++-v3/doc/html/manual/appendix_gfdl.html @@ -1,8 +1,7 @@ - -Appendix E. GNU Free Documentation License

GNU Free Documentation License

Version 1.3, 3 November 2008

Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.

@@ -446,4 +445,4 @@ being LIST, and with the Back-Cover Texts being LIST.

use in free software.

+  Home 
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/appendix_gpl.html b/libstdc++-v3/doc/html/manual/appendix_gpl.html index f796051..204ac2b 100644 --- a/libstdc++-v3/doc/html/manual/appendix_gpl.html +++ b/libstdc++-v3/doc/html/manual/appendix_gpl.html @@ -1,10 +1,9 @@ - -Appendix D.  GNU General Public License version 3

GNU General Public License version 3

Version 3, 29 June 2007 @@ -78,7 +77,7 @@

The precise terms and conditions for copying, distribution and modification follow. -

+

TERMS AND CONDITIONS

0. Definitions. @@ -619,7 +618,7 @@ waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. -

+

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs @@ -680,4 +679,4 @@ under certain conditions; type ‘show c’ for det

+ Home Appendix E. GNU Free Documentation License
\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/appendix_porting.html b/libstdc++-v3/doc/html/manual/appendix_porting.html index 42e945c..23611571 100644 --- a/libstdc++-v3/doc/html/manual/appendix_porting.html +++ b/libstdc++-v3/doc/html/manual/appendix_porting.html @@ -1,13 +1,12 @@ - -Appendix B.  Porting and Maintenance

Porting and Maintenance - +

Configure and Build Hacking

Prerequisites

+

Configure and Build Hacking

Prerequisites

As noted previously, certain other tools are necessary for hacking on files that control configure (configure.ac, @@ -41,7 +40,7 @@ Support for C++11 dialect. in GCC try to stay in sync with each other in terms of versions of the auto-tools used, so please try to play nicely with the neighbors. -

Overview

General Process

+

Overview

General Process

The configure process begins the act of building libstdc++, and is started via:

@@ -62,11 +61,11 @@ make all
 in the build directory starts the build process. The all target comes from the Makefile file, which is  generated via configure from the Makefile.in file, which is in turn generated (via
 automake) from the file
 Makefile.am.
-

What Comes from Where

Figure B.1. Configure and Build File Dependencies

Dependency Graph for Configure and Build Files

+

What Comes from Where

Figure B.1. Configure and Build File Dependencies

Dependency Graph for Configure and Build Files

Regenerate all generated files by using the command autoreconf at the top level of the libstdc++ source directory. -

Configure

Storing Information in non-AC files (like configure.host)

+

Configure

Storing Information in non-AC files (like configure.host)

Until that glorious day when we can use AC_TRY_LINK with a cross-compiler, we have to hardcode the results of what the tests would have shown if they could be run. So we have an inflexible @@ -88,7 +87,7 @@ in the build directory starts the build process. The all

Coding and Commenting Conventions

+

Coding and Commenting Conventions

Most comments should use {octothorpes, shibboleths, hash marks, pound signs, whatever} rather than "dnl". Nearly all comments in configure.ac should. Comments inside macros written in ancilliary @@ -105,7 +104,7 @@ in the build directory starts the build process. The all$target* variables, such as $target_alias. The single exception is in configure.ac, for automake+dejagnu's sake. -

The acinclude.m4 layout

+

The acinclude.m4 layout

The nice thing about acinclude.m4/aclocal.m4 is that macros aren't actually performed/called/expanded/whatever here, just loaded. So we can arrange the contents however we like. As of this writing, @@ -176,7 +175,7 @@ in the build directory starts the build process. The all

Things which we don't seem to use directly, but just has to be present otherwise stuff magically goes wonky. -

GLIBCXX_ENABLE, the --enable maker

+

GLIBCXX_ENABLE, the --enable maker

All the GLIBCXX_ENABLE_FOO macros use a common helper, GLIBCXX_ENABLE. (You don't have to use it, but it's easy.) The helper does two things for us: @@ -205,7 +204,7 @@ in the build directory starts the build process. The all

  • +

    • FEATURE is the string that follows --enable. The results of the test (such as it is) will be in the variable $enable_FEATURE, where FEATURE has been squashed. Example: @@ -264,7 +263,7 @@ in the build directory starts the build process. The all

Make

+

Make

The build process has to make all of object files needed for static or shared libraries, but first it has to generate some include files. The general order is as follows: @@ -307,4 +306,4 @@ in the build directory starts the build process. The alllibstdc++.so and libstdc++.a. -

+

\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/associative.html b/libstdc++-v3/doc/html/manual/associative.html index 7bd4c69..21b0104 100644 --- a/libstdc++-v3/doc/html/manual/associative.html +++ b/libstdc++-v3/doc/html/manual/associative.html @@ -1,9 +1,8 @@ - -Associative

Associative

Insertion Hints

Section [23.1.2], Table 69, of the C++ standard lists this function for all of the associative containers (map, set, etc):

@@ -39,7 +38,7 @@
      paragraph.  *grin*
    

If the hint parameter ('p' above) is equivalent to: -

  • +

    • begin(), then the item being inserted should have a key less than all the other keys in the container. The item will be inserted at the beginning of the container, @@ -84,7 +83,7 @@ the new item would in fact belong there. If the hint does not point to the correct place, then no further local searching is done; the search begins from scratch in logarithmic time. -

    bitset

    Size Variable

    +

    bitset

    Size Variable

    No, you cannot write code of the form

           #include <bitset>
    @@ -102,7 +101,7 @@
          There are a couple of ways to handle this kind of thing.  Please
          consider all of them before passing judgement.  They include, in
          no chaptericular order:
    -   

    • A very large N in bitset<N>.

    • A container<bool>.

    • Extremely weird solutions.

    +

    • A very large N in bitset<N>.

    • A container<bool>.

    • Extremely weird solutions.

    A very large N in bitset<N>.   It has been pointed out a few times in newsgroups that N bits only takes up @@ -169,7 +168,7 @@

    Also note that the implementation of bitset used in libstdc++ has some extensions. -

    Type String

    +

    Type String

    Bitmasks do not take char* nor const char* arguments in their constructors. This is something of an accident, but you can read @@ -186,7 +185,7 @@ instead of

           std::bitset<5> b ( “10110” );    // invalid
    -    
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/atomics.html b/libstdc++-v3/doc/html/manual/atomics.html index fe3a1f0..8aebc78 100644 --- a/libstdc++-v3/doc/html/manual/atomics.html +++ b/libstdc++-v3/doc/html/manual/atomics.html @@ -1,16 +1,15 @@ - -Chapter 14.  Atomics

    Chapter 14.  Atomics - +

    Table of Contents

    API Reference

    Facilities for atomic operations. -

    API Reference

    +

    API Reference

    All items are declared in the standard header file atomic.

    @@ -28,4 +27,4 @@

    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/backwards.html b/libstdc++-v3/doc/html/manual/backwards.html index ad89307..e6e934c 100644 --- a/libstdc++-v3/doc/html/manual/backwards.html +++ b/libstdc++-v3/doc/html/manual/backwards.html @@ -1,9 +1,8 @@ - -Backwards Compatibility

    Backwards Compatibility

    First

    The first generation GNU C++ library was called libg++. It was a separate GNU project, although reliably paired with GCC. Rumors imply that it had a working relationship with at least two kinds of dinosaur. @@ -17,8 +16,8 @@ ISO Standard (e.g., statistical analysis). While there are a lot of really useful things that are used by a lot of people, the Standards Committee couldn't include everything, and so a lot of those “obvious” classes didn't get included. -

    Known Issues include many of the limitations of its immediate ancestor.

    Portability notes and known implementation limitations are as follows.

    No ios_base

    At least some older implementations don't have std::ios_base, so you should use std::ios::badbit, std::ios::failbit and std::ios::eofbit and std::ios::goodbit. -

    No cout in <ostream.h>, no cin in <istream.h>

    +

    Known Issues include many of the limitations of its immediate ancestor.

    Portability notes and known implementation limitations are as follows.

    No ios_base

    At least some older implementations don't have std::ios_base, so you should use std::ios::badbit, std::ios::failbit and std::ios::eofbit and std::ios::goodbit. +

    No cout in <ostream.h>, no cin in <istream.h>

    In earlier versions of the standard, <fstream.h>, <ostream.h> @@ -32,7 +31,7 @@ archived. For the desperate, the GCC extensions page describes where to find the last libg++ source. The code is considered replaced and rewritten. -

    Second

    +

    Second

    The second generation GNU C++ library was called libstdc++, or libstdc++-v2. It spans the time between libg++ and pre-ISO C++ standardization and is usually associated with the following GCC @@ -44,7 +43,7 @@ considered replaced and rewritten. archived. The code is considered replaced and rewritten.

    Portability notes and known implementation limitations are as follows. -

    Namespace std:: not supported

    +

    Namespace std:: not supported

    Some care is required to support C++ compiler and or library implementation that do not have the standard library in namespace std. @@ -108,10 +107,10 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [ AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ]) fi ]) -

Illegal iterator usage

+

Illegal iterator usage

The following illustrate implementation-allowed illegal iterator use, and then correct use. -

  • +

    • you cannot do ostream::operator<<(iterator) to print the address of the iterator => use operator<< &*iterator instead @@ -121,7 +120,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [

    • if (iterator) won't work any more => use if (iterator != iterator_type()) -

isspace from <cctype> is a macro +

isspace from <cctype> is a macro

Glibc 2.0.x and 2.1.x define <ctype.h> functionality as macros (isspace, isalpha etc.). @@ -155,7 +154,7 @@ std:: (__ctype_b[(int) ( ( 'X' ) )] & (unsigned short int) _ISspace ) ; (<ctype.h>) and the definitions in namespace std:: (<cctype>). -

No vector::at, deque::at, string::at

+

No vector::at, deque::at, string::at

One solution is to add an autoconf-test for this:

 AC_MSG_CHECKING(for container::at)
@@ -181,7 +180,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
 

If you are using other (non-GNU) compilers it might be a good idea to check for string::at separately. -

No std::char_traits<char>::eof

+

No std::char_traits<char>::eof

Use some kind of autoconf test, plus this:

 #ifdef HAVE_CHAR_TRAITS
@@ -189,7 +188,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
 #else
 #define CPP_EOF EOF
 #endif
-

No string::clear

+

No string::clear

There are two functions for deleting the contents of a string: clear and erase (the latter returns the string). @@ -207,18 +206,18 @@ erase(size_type __pos = 0, size_type __n = npos) Unfortunately, clear is not implemented in this version, so you should use erase (which is probably faster than operator=(charT*)). -

+

Removal of ostream::form and istream::scan extensions

These are no longer supported. Please use stringstreams instead. -

No basic_stringbuf, basic_stringstream

+

No basic_stringbuf, basic_stringstream

Although the ISO standard i/ostringstream-classes are provided, (<sstream>), for compatibility with older implementations the pre-ISO i/ostrstream (<strstream>) interface is also provided, with these caveats: -

  • +

    • strstream is considered to be deprecated

    • strstream is limited to char @@ -300,14 +299,14 @@ any = temp; Another example of using stringstreams is in this howto.

      There is additional information in the libstdc++-v2 info files, in particular “info iostream”. -

    Little or no wide character support

    +

    Little or no wide character support

    Classes wstring and char_traits<wchar_t> are not supported. -

    No templatized iostreams

    +

    No templatized iostreams

    Classes wfilebuf and wstringstream are not supported. -

    Thread safety issues

    +

    Thread safety issues

    Earlier GCC releases had a somewhat different approach to threading configuration and proper compilation. Before GCC 3.0, configuration of the threading model was dictated by compiler @@ -343,7 +342,7 @@ particular “info iostream”

    Third

    The third generation GNU C++ library is called libstdc++, or +

    Third

    The third generation GNU C++ library is called libstdc++, or libstdc++-v3.

    The subset commonly known as the Standard Template Library (chapters 23 through 25, mostly) is adapted from the final release of the SGI STL (version 3.3), with extensive changes.

    A more formal description of the V3 goals can be found in the official design document. -

    Portability notes and known implementation limitations are as follows.

    Pre-ISO headers moved to backwards or removed

    The pre-ISO C++ headers +

    Portability notes and known implementation limitations are as follows.

    Pre-ISO headers moved to backwards or removed

    The pre-ISO C++ headers (<iostream.h>, <defalloc.h> etc.) are available, unlike previous libstdc++ versions, but inclusion @@ -438,7 +437,7 @@ like <vector.h> can be replaced with using namespace std; can be put at the global scope. This should be enough to get this code compiling, assuming the other usage is correct. -

    Extension headers hash_map, hash_set moved to ext or backwards

    At this time most of the features of the SGI STL extension have been +

    Extension headers hash_map, hash_set moved to ext or backwards

    At this time most of the features of the SGI STL extension have been replaced by standardized libraries. In particular, the unordered_map and unordered_set containers of TR1 and C++ 2011 @@ -512,7 +511,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [ AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ]) fi ]) -

    No ios::nocreate/ios::noreplace. +

    No ios::nocreate/ios::noreplace.

    The existence of ios::nocreate being used for input-streams has been confirmed, most probably because the author thought it would be more correct to specify nocreate explicitly. So @@ -523,7 +522,7 @@ open the file for reading, check if it has been opened, and then decide whether you want to create/replace or not. To my knowledge, even older implementations support app, ate and trunc (except for app ?). -

    +

    No stream::attach(int fd)

    Phil Edwards writes: It was considered and rejected for the ISO @@ -546,7 +545,7 @@ No stream::attach(int fd) For another example of this, refer to fdstream example by Nicolai Josuttis. -

    +

    Support for C++98 dialect.

    Check for complete library coverage of the C++1998/2003 standard.

    @@ -614,7 +613,7 @@ AC_DEFUN([AC_HEADER_STDCXX_98], [
         AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ])
       fi
     ])
    -

    +

    Support for C++TR1 dialect.

    Check for library coverage of the TR1 standard.

    @@ -691,7 +690,7 @@ AC_DEFUN([AC_HEADER_TR1_UNORDERED_SET], [
         AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ])
       fi
     ])
    -

    +

    Support for C++11 dialect.

    Check for baseline language coverage in the compiler for the C++11 standard.

    @@ -935,25 +934,25 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
       but the autoconf checks above could be extended to test for incomplete
       C++11 support with -std=c++0x and
       -std=gnu++0x.
    -

    +

    Container::iterator_type is not necessarily Container::value_type*

    This is a change in behavior from older versions. Now, most iterator_type typedefs in container classes are POD objects, not value_type pointers. -

    Bibliography

    +

    Bibliography

    Migrating to GCC 4.1 - . Dan Kegel.

    + . Dan Kegel.

    + . Martin Michlmayr.

    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/bitmap_allocator.html b/libstdc++-v3/doc/html/manual/bitmap_allocator.html index 1e78458..e8a75d1 100644 --- a/libstdc++-v3/doc/html/manual/bitmap_allocator.html +++ b/libstdc++-v3/doc/html/manual/bitmap_allocator.html @@ -1,10 +1,9 @@ - -Chapter 21. The bitmap_allocator

    Chapter 21. The bitmap_allocator

    +

    Design

    As this name suggests, this allocator uses a bit-map to keep track of the used and unused memory locations for its book-keeping purposes. @@ -30,4 +29,4 @@ Mutex Protection around every allocation/deallocation. The state of the macro is picked up automatically from the gthr abstraction layer. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html b/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html index 04d42de..2afeebc 100644 --- a/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html +++ b/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html @@ -1,6 +1,5 @@ - -Implementation

    Implementation

    Free List Store

    +Implementation

    Implementation

    Free List Store

    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 @@ -48,7 +47,7 @@ by a percentage of less than some THRESHOLD value, then return true, else return false.

Currently, (3) is being used with a value of 36% Maximum wastage per Super Block. -

Super Block

+

Super Block

A super block is the block of memory acquired from the FLS from which the bitmap allocator carves out memory for single objects and satisfies the user's requests. These super blocks come in @@ -63,7 +62,7 @@ else return false.

The super block is contained in the FLS, and the FLS is responsible for getting / returning Super Bocks to and from the OS using operator new as defined by the C++ standard. -

Super Block Data Layout

+

Super Block Data Layout

Each Super Block will be of some size that is a multiple of the number of Bits Per Block. Typically, this value is chosen as Bits_Per_Byte x sizeof(size_t). On an x86 system, this gives the @@ -76,7 +75,7 @@ else return false.

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). -

Table 21.1. Bitmap Allocator Memory Map

268042949672954294967295Data -> Space for 64 ints

+

Table 21.1. Bitmap Allocator Memory Map

268042949672954294967295Data -> Space for 64 ints

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 @@ -103,7 +102,7 @@ else return false.

The 3rd 4x2 is size of the bitmap itself, which is the size of 32-bits x 2, which is 8-bytes, or 2 x sizeof(size_t). -

Maximum Wasted Percentage

+

Maximum Wasted Percentage

This has nothing to do with the algorithm per-se, only with some vales that must be chosen correctly to ensure that the allocator performs well in a real word scenario, and maintains a good @@ -128,7 +127,7 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%

Thus, knowing these values, and based on the sizeof(value_type), we may create a function that returns the Max_Wastage_Percentage for us to use. -

allocate

+

allocate

The allocate function is specialized for single object allocation ONLY. Thus, ONLY if n == 1, will the bitmap_allocator's specialized algorithm be used. Otherwise, the request is satisfied @@ -148,7 +147,7 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%

  • Is there any block in whatever region of memory that we own free? This is done by checking -

    • +

      • The use count for each super block, and if that fails then

      • The individual bit-maps for each super block. @@ -163,7 +162,7 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524% This process involves Refilling the internal exponentially growing memory pool. The said effect is achieved by calling _S_refill_pool which does the following: -

        • +

          • Gets more memory from the Global Free List of the Required size.

          • @@ -183,7 +182,7 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524% Thus, you can clearly see that the allocate function is nothing but a combination of the next-fit and first-fit algorithm optimized ONLY for single object allocations. -

          deallocate

          +

          deallocate

          The deallocate function again is specialized for single objects ONLY. For all n belonging to > 1, the operator delete is called without further ado, and the deallocate function returns. @@ -214,7 +213,7 @@ single object allocations. the vector. While doing this, we also make sure that the basic invariant is maintained by making sure that _S_last_request and _S_last_dealloc_index point to valid locations within the vector. -

          Questions

          1

          +

          Questions

          1

          Q1) The "Data Layout" section is cryptic. I have no idea of what you are trying to say. Layout of what? The free-list? Each bitmap? The Super Block? @@ -224,7 +223,7 @@ size. In the example, a super block of size 32 x 1 is taken. The general formula for calculating the size of a super block is 32 x sizeof(value_type) x 2^n, where n ranges from 0 to 32 for 32-bit systems. -

          2

          +

          2

          And since I just mentioned the term `each bitmap', what in the world is meant by it? What does each bitmap manage? How does it relate to the super block? Is the Super @@ -241,7 +240,7 @@ Block a bitmap as well? blocks' status. Each bit-map is made up of a number of size_t, whose exact number for a super-block of a given size I have just mentioned. -

          3

          +

          3

          How do the allocate and deallocate functions work in regard to bitmaps?

          @@ -270,7 +269,7 @@ Block a bitmap as well?

          The bit-map now looks like this: 1111111111111111111111111111111111111111111111111111111111111110 -

          Locality

          +

          Locality

          Another issue would be whether to keep the all bitmaps in a separate area in memory, or to keep them near the actual blocks that will be given out or allocated for the client. After some @@ -287,7 +286,7 @@ equivalent.

        • And also this would preserve the cac new_allocator's book keeping overhead is too much for small objects and single object allocations, though it preserves the locality of blocks very well when they are returned back to the allocator. -

        Overhead and Grow Policy

        +

        Overhead and Grow Policy

        Expected overhead per block would be 1 bit in memory. Also, once the address of the free list has been found, the cost for allocation/deallocation would be negligible, and is supposed to be @@ -310,4 +309,4 @@ equivalent.

      • 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. -

    +

  • \ 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 ab4804c..1c9c22a 100644 --- a/libstdc++-v3/doc/html/manual/bugs.html +++ b/libstdc++-v3/doc/html/manual/bugs.html @@ -1,10 +1,9 @@ - -Bugs

    Bugs

    Implementation Bugs

    +Bugs

    Bugs

    Implementation Bugs

    Information on known bugs, details on efforts to fix them, and fixed bugs are all available as part of the GCC bug tracking system, with the category set to libstdc++. -

    Standard Bugs

    +

    Standard Bugs

    Everybody's got issues. Even the C++ Standard Library.

    The Library Working Group, or LWG, is the ISO subcommittee responsible @@ -35,7 +34,7 @@ _GLIBCXX_RESOLVE_LIB_DEFECTS for examples of style. Note that we usually do not make changes to the code until an issue has reached DR status. -

    5: +

    5: string::compare specification questionable

    This should be two overloaded functions rather than a single function.

    17: @@ -349,4 +348,4 @@ More algorithms that throw away information

    The traditional HP / SGI return type and value is blessed by the resolution of the DR. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/concept_checking.html b/libstdc++-v3/doc/html/manual/concept_checking.html index a31d4a3..e115a5e 100644 --- a/libstdc++-v3/doc/html/manual/concept_checking.html +++ b/libstdc++-v3/doc/html/manual/concept_checking.html @@ -1,9 +1,8 @@ - -Concept Checking

    Concept Checking

    In 1999, SGI added “concept checkers” to their implementation of the STL: code which checked the template parameters of instantiated pieces of the STL, in order to insure @@ -47,4 +46,4 @@  Home Chapter 6.  Utilities -

    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/concurrency.html b/libstdc++-v3/doc/html/manual/concurrency.html index 07a3228..caefd47 100644 --- a/libstdc++-v3/doc/html/manual/concurrency.html +++ b/libstdc++-v3/doc/html/manual/concurrency.html @@ -1,16 +1,15 @@ - -Chapter 15.  Concurrency

    Chapter 15.  Concurrency - +

    Table of Contents

    API Reference

    Facilities for concurrent operation, and control thereof. -

    API Reference

    +

    API Reference

    All items are declared in one of four standard header files.

    In header mutex, class @@ -39,4 +38,4 @@  Home Part III.  Extensions -

    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/configure.html b/libstdc++-v3/doc/html/manual/configure.html index b3cd59e..34f2016 100644 --- a/libstdc++-v3/doc/html/manual/configure.html +++ b/libstdc++-v3/doc/html/manual/configure.html @@ -1,6 +1,5 @@ - -Configure

    Configure

    +Configure

    Configure

    When configuring libstdc++, you'll have to configure the entire gccsrcdir directory. Consider using the toplevel gcc configuration option @@ -18,7 +17,7 @@

    The canonical way to find out the configure options that are available for a given set of libstdc++ sources is to go to the source directory and then type: ./configure --help. -

    --enable-multilib[default]

    This is part of the generic multilib support for building cross +

    --enable-multilib[default]

    This is part of the generic multilib support for building cross compilers. As such, targets like "powerpc-elf" will have libstdc++ built many different ways: "-msoft-float" and not, etc. A different libstdc++ will be built for each of @@ -228,4 +227,4 @@ facilites, which might be undesirable in a low-memory environment or when standard error is not available. This option disables those messages. This option does not change the library ABI. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/containers.html b/libstdc++-v3/doc/html/manual/containers.html index 5656780..d3254d0 100644 --- a/libstdc++-v3/doc/html/manual/containers.html +++ b/libstdc++-v3/doc/html/manual/containers.html @@ -1,14 +1,13 @@ - -Chapter 9.  Containers

    Chapter 9.  Containers - -

    Sequences

    list

    list::size() is O(n)

    + +

    Sequences

    list

    list::size() is O(n)

    Yes it is, and that's okay. This is a decision that we preserved when we imported SGI's STL implementation. The following is quoted from their FAQ: @@ -42,8 +41,8 @@

     	 if (L.empty())
     	     ...
    -	 

    vector

    -

    Space Overhead Management

    +

    vector

    +

    Space Overhead Management

    In this message to the list, Daniel Kostecky announced work on an alternate form of std::vector that would support @@ -52,4 +51,4 @@

    The first two alpha releases were announced here and here. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/containers_and_c.html b/libstdc++-v3/doc/html/manual/containers_and_c.html index 1e0f8f8..2887ec2 100644 --- a/libstdc++-v3/doc/html/manual/containers_and_c.html +++ b/libstdc++-v3/doc/html/manual/containers_and_c.html @@ -1,9 +1,8 @@ - -Interacting with C

    Interacting with C

    Containers vs. Arrays

    You're writing some code and can't decide whether to use builtin arrays or some kind of container. There are compelling reasons to use one of the container classes, but you're afraid that @@ -84,7 +83,7 @@ template<typename T, unsigned int sz> inline unsigned int lengthof (T (&)[sz]) { return sz; }

    looks just weird! Hint: unused parameters can be left nameless. -

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/debug.html b/libstdc++-v3/doc/html/manual/debug.html index 677e624..9193cf6 100644 --- a/libstdc++-v3/doc/html/manual/debug.html +++ b/libstdc++-v3/doc/html/manual/debug.html @@ -1,10 +1,9 @@ - -Debugging Support

    Debugging Support

    +Debugging Support

    Debugging Support

    There are numerous things that can be done to improve the ease with which C++ binaries are debugged when using the GNU tool chain. Here are some of them. -

    Using g++

    +

    Using g++

    Compiler flags determine how debug information is transmitted between compilation and debug or analysis tools.

    @@ -31,7 +30,7 @@ Many other options are available: please see "Options for Debugging Your Program" in Using the GNU Compiler Collection (GCC) for a complete list. -

    Debug Versions of Library Binary Files

    +

    Debug Versions of Library Binary Files

    If you would like debug symbols in libstdc++, there are two ways to build libstdc++ with debug flags. The first is to create a separate debug build by running make from the top-level of a tree @@ -53,7 +52,7 @@

    This quick and dirty approach is often sufficient for quick debugging tasks, when you cannot or don't want to recompile your - application to use the debug mode.

    Memory Leak Hunting

    + application to use the debug mode.

    Memory Leak Hunting

    There are various third party memory tracing and debug utilities that can be used to provide detailed memory allocation information about C++ code. An exhaustive list of tools is not going to be @@ -122,7 +121,7 @@ up the runtime environment, library, and test file, might be:

        valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
    -

    Data Race Hunting

    +

    Data Race Hunting

    All synchronization primitives used in the library internals need to be understood by race detectors so that they do not produce false reports.

    @@ -172,7 +171,7 @@ #define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A)

    Refer to the documentation of each particular tool for details. -

    Using gdb

    +

    Using gdb

    Many options are available for GDB itself: please see "GDB features for C++" in the GDB documentation. Also @@ -225,18 +224,18 @@ on-line versions of the GDB user manual in GDB's homepage, at "GDB: The GNU Project Debugger" . -

    Tracking uncaught exceptions

    +

    Tracking uncaught exceptions

    The verbose termination handler gives information about uncaught exceptions which are killing the program. It is described in the linked-to page. -

    Debug Mode

    The Debug Mode +

    Debug Mode

    The Debug Mode has compile and run-time checks for many containers. -

    Compile Time Checking

    The Compile-Time +

    Compile Time Checking

    The Compile-Time Checks Extension has compile-time checks for many algorithms. -

    Profile-based Performance Analysis

    The Profile-based +

    Profile-based Performance Analysis

    The Profile-based Performance Analysis Extension has performance checks for many algorithms.

    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/debug_mode.html b/libstdc++-v3/doc/html/manual/debug_mode.html index 0f13fdc..a297c18 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode.html +++ b/libstdc++-v3/doc/html/manual/debug_mode.html @@ -1,10 +1,9 @@ - -Chapter 17. Debug Mode

    Chapter 17. Debug Mode

    Intro

    By default, libstdc++ is built with efficiency in mind, and therefore performs little or no error checking that is not required by the C++ standard. This means that programs that @@ -21,7 +20,7 @@ The libstdc++ debug mode performs checking for many areas of the C++ standard, but the focus is on checking interactions among standard iterators, containers, and algorithms, including: -

    • Safe iterators: Iterators keep track of the +

      • Safe iterators: Iterators keep track of the container whose elements they reference, so errors such as incrementing a past-the-end iterator or dereferencing an iterator that points to a container that has been destructed are diagnosed @@ -35,4 +34,4 @@ the same predicate that was passed to set_intersection; the libstdc++ debug mode will detect an error if the sequence is not sorted or was sorted by a - different predicate.

    + different predicate.

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/debug_mode_design.html b/libstdc++-v3/doc/html/manual/debug_mode_design.html index 282eb1d..ccb8575 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode_design.html +++ b/libstdc++-v3/doc/html/manual/debug_mode_design.html @@ -1,11 +1,10 @@ - -Design

    Design

    -

    Goals

    +Design

    Design

    +

    Goals

    The libstdc++ debug mode replaces unsafe (but efficient) standard containers and iterators with semantically equivalent safe standard containers and iterators to aid in debugging user programs. The - following goals directed the design of the libstdc++ debug mode:

    • Correctness: the libstdc++ debug mode must not change + following goals directed the design of the libstdc++ debug mode:

      • Correctness: the libstdc++ debug mode must not change the semantics of the standard library for all cases specified in the ANSI/ISO C++ standard. The essence of this constraint is that any valid C++ program should behave in the same manner regardless @@ -89,10 +88,10 @@ (performance regression) or allocating extra memory associated with each iterator with new (changes the program semantics).

      -

    Methods

    +

    Methods

    This section provides an overall view of the design of the libstdc++ debug mode and details the relationship between design - decisions and the stated design goals.

    The Wrapper Model

    The libstdc++ debug mode uses a wrapper model where the + decisions and the stated design goals.

    The Wrapper Model

    The libstdc++ debug mode uses a wrapper model where the debugging versions of library components (e.g., iterators and containers) form a layer on top of the release versions of the library components. The debugging components first verify that the @@ -109,19 +108,19 @@ their associated containers, which are necessary to detect certain types of standard library usage errors such as dereferencing past-the-end iterators or inserting into a container using an - iterator from a different container.

    Safe Iterators

    Iterator wrappers provide a debugging layer over any iterator that + iterator from a different container.

    Safe Iterators

    Iterator wrappers provide a debugging layer over any iterator that is attached to a particular container, and will manage the information detailing the iterator's state (singular, dereferenceable, etc.) and tracking the container to which the iterator is attached. Because iterators have a well-defined, common interface the iterator wrapper is implemented with the iterator adaptor class template __gnu_debug::_Safe_iterator, - which takes two template parameters:

    • Iterator: The underlying iterator type, which must + which takes two template parameters:

      • Iterator: The underlying iterator type, which must be either the iterator or const_iterator typedef from the sequence type this iterator can reference.

      • Sequence: The type of sequence that this iterator references. This sequence must be a safe sequence (discussed below) whose iterator or const_iterator typedef - is the type of the safe iterator.

    Safe Sequences (Containers)

    Container wrappers provide a debugging layer over a particular + is the type of the safe iterator.

    Safe Sequences (Containers)

    Container wrappers provide a debugging layer over a particular container type. Because containers vary greatly in the member functions they support and the semantics of those member functions (especially in the area of iterator invalidation), container @@ -157,7 +156,7 @@ template<typename _Tp, typename _Allocator = allocator<_Tp> // duplicate std::list interface with debugging semantics }; -

    Precondition Checking

    The debug mode operates primarily by checking the preconditions of +

    Precondition Checking

    The debug mode operates primarily by checking the preconditions of all standard library operations that it supports. Preconditions that are always checked (regardless of whether or not we are in debug mode) are checked via the __check_xxx macros defined @@ -184,7 +183,7 @@ template<typename _Tp, typename _Allocator = allocator<_Tp> cousin _GLIBCXX_DEBUG_PEDASSERT, or the assertion check macro that supports more advance formulation of error messages, _GLIBCXX_DEBUG_VERIFY. These macros are - documented more thoroughly in the debug mode source code.

    Release- and debug-mode coexistence

    The libstdc++ debug mode is the first debug mode we know of that + documented more thoroughly in the debug mode source code.

    Release- and debug-mode coexistence

    The libstdc++ debug mode is the first debug mode we know of that is able to provide the "Per-use recompilation" (4) guarantee, that allows release-compiled and debug-compiled code to be linked and executed together without causing unpredictable behavior. This @@ -200,7 +199,7 @@ template<typename _Tp, typename _Allocator = allocator<_Tp> recompilation but have had to give up some checking of the std::basic_string class template (namely, safe iterators). -

    Compile-time coexistence of release- and debug-mode components

    Both the release-mode components and the debug-mode +

    Compile-time coexistence of release- and debug-mode components

    Both the release-mode components and the debug-mode components need to exist within a single translation unit so that the debug versions can wrap the release versions. However, only one of these components should be user-visible at any particular @@ -254,7 +253,7 @@ namespace std // namespace __debug __attribute__ ((strong)); inline namespace __debug { } } -

    Link- and run-time coexistence of release- and +
    Link- and run-time coexistence of release- and debug-mode components

    Because each component has a distinct and separate release and debug implementation, there is no issue with link-time coexistence: the separate namespaces result in different mangled @@ -316,10 +315,10 @@ test02() changes. The effect on users is expected to be minimal, as there are simple alternatives (e.g., __gnu_debug::basic_string), and the usability benefit we gain from the ability to mix debug- and - release-compiled translation units is enormous.

    Alternatives for Coexistence

    The coexistence scheme above was chosen over many alternatives, + release-compiled translation units is enormous.

    Alternatives for Coexistence

    The coexistence scheme above was chosen over many alternatives, including language-only solutions and solutions that also required extensions to the C++ front end. The following is a partial list of - solutions, with justifications for our rejection of each.

    • Completely separate debug/release libraries: This is by + solutions, with justifications for our rejection of each.

      • Completely separate debug/release libraries: This is by far the simplest implementation option, where we do not allow any coexistence of debug- and release-compiled translation units in a program. This solution has an extreme negative affect on usability, @@ -388,11 +387,11 @@ test02() that breaks user specialization), and additional testcases will be added as we are able to identify other typical problem cases. These test cases will serve as a benchmark by which we can compare debug - mode implementations.

    Other Implementations

    + mode implementations.

    Other Implementations

    There are several existing implementations of debug modes for C++ standard library implementations, although none of them directly supports debugging for programs using libstdc++. The existing - implementations include:

    • SafeSTL: + implementations include:

      • SafeSTL: SafeSTL was the original debugging version of the Standard Template Library (STL), implemented by Cay S. Horstmann on top of the Hewlett-Packard STL. Though it inspired much work in this area, it @@ -409,4 +408,4 @@ test02() a full debug-mode implementation (including debugging for CodeWarrior extensions) and is easy to use, although it meets only the "Full recompilation" (1) recompilation - guarantee.

    + guarantee.

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/debug_mode_semantics.html b/libstdc++-v3/doc/html/manual/debug_mode_semantics.html index 33b1165..439cf60 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode_semantics.html +++ b/libstdc++-v3/doc/html/manual/debug_mode_semantics.html @@ -1,6 +1,5 @@ - -Semantics

    Semantics

    +Semantics

    Semantics

    A program that uses the C++ standard library correctly will maintain the same semantics under debug mode as it had with the normal (release) library. All functional and exception-handling @@ -36,7 +35,7 @@ (N.B. In GCC 3.4.x and 4.0.0, due to a bug, -D_GLIBXX_DEBUG_PEDANTIC was also needed. The problem has been fixed in GCC 4.0.1 and later versions.)

    The following library components provide extra debugging - capabilities in debug mode:

    • std::basic_string (no safe iterators and see note below)

    • std::bitset

    • std::deque

    • std::list

    • std::map

    • std::multimap

    • std::multiset

    • std::set

    • std::vector

    • std::unordered_map

    • std::unordered_multimap

    • std::unordered_set

    • std::unordered_multiset

    N.B. although there are precondition checks for some string operations, + capabilities in debug mode:

    • std::basic_string (no safe iterators and see note below)

    • std::bitset

    • std::deque

    • std::list

    • std::map

    • std::multimap

    • std::multiset

    • std::set

    • std::vector

    • std::unordered_map

    • std::unordered_multimap

    • std::unordered_set

    • std::unordered_multiset

    N.B. although there are precondition checks for some string operations, e.g. operator[], they will not always be run when using the char and wchar_t specialisations (std::string and @@ -52,4 +51,4 @@ with the debug-mode checks included, but this is unsupported and not guaranteed to work. For full debug-mode support you can use the __gnu_debug::basic_string debugging container directly, which always works correctly. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/debug_mode_using.html b/libstdc++-v3/doc/html/manual/debug_mode_using.html index 00acb0c..f6ced5b 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode_using.html +++ b/libstdc++-v3/doc/html/manual/debug_mode_using.html @@ -1,7 +1,6 @@ - -Using

    Using

    -

    Using the Debug Mode

    To use the libstdc++ debug mode, compile your application with the +Using

    Using

    +

    Using the Debug Mode

    To use the libstdc++ debug mode, compile your application with the compiler flag -D_GLIBCXX_DEBUG. Note that this flag changes the sizes and behavior of standard class templates such as std::vector, and therefore you can only link code @@ -10,7 +9,7 @@ units.

    By default, error messages are formatted to fit on lines of about 78 characters. The environment variable GLIBCXX_DEBUG_MESSAGE_LENGTH can be used to request a - different length.

    Using a Specific Debug Container

    When it is not feasible to recompile your entire application, or + different length.

    Using a Specific Debug Container

    When it is not feasible to recompile your entire application, or only specific containers need checking, debugging containers are available as GNU extensions. These debugging containers are functionally equivalent to the standard drop-in containers used in @@ -19,6 +18,6 @@ mode or with debug mode. The following table provides the names and headers of the debugging containers: -

    Table 17.1. Debugging Containers

    ContainerHeaderDebug containerDebug header
    std::bitsetbitset__gnu_debug::bitset<debug/bitset>
    std::dequedeque__gnu_debug::deque<debug/deque>
    std::listlist__gnu_debug::list<debug/list>
    std::mapmap__gnu_debug::map<debug/map>
    std::multimapmap__gnu_debug::multimap<debug/map>
    std::multisetset__gnu_debug::multiset<debug/set>
    std::setset__gnu_debug::set<debug/set>
    std::stringstring__gnu_debug::string<debug/string>
    std::wstringstring__gnu_debug::wstring<debug/string>
    std::basic_stringstring__gnu_debug::basic_string<debug/string>
    std::vectorvector__gnu_debug::vector<debug/vector>

    In addition, when compiling in C++11 mode, these additional +

    Table 17.1. Debugging Containers

    ContainerHeaderDebug containerDebug header
    std::bitsetbitset__gnu_debug::bitset<debug/bitset>
    std::dequedeque__gnu_debug::deque<debug/deque>
    std::listlist__gnu_debug::list<debug/list>
    std::mapmap__gnu_debug::map<debug/map>
    std::multimapmap__gnu_debug::multimap<debug/map>
    std::multisetset__gnu_debug::multiset<debug/set>
    std::setset__gnu_debug::set<debug/set>
    std::stringstring__gnu_debug::string<debug/string>
    std::wstringstring__gnu_debug::wstring<debug/string>
    std::basic_stringstring__gnu_debug::basic_string<debug/string>
    std::vectorvector__gnu_debug::vector<debug/vector>

    In addition, when compiling in C++11 mode, these additional containers have additional debug capability. -

    Table 17.2. Debugging Containers C++11

    ContainerHeaderDebug containerDebug header
    std::unordered_mapunordered_map__gnu_debug::unordered_map<debug/unordered_map>
    std::unordered_multimapunordered_map__gnu_debug::unordered_multimap<debug/unordered_map>
    std::unordered_setunordered_set__gnu_debug::unordered_set<debug/unordered_set>
    std::unordered_multisetunordered_set__gnu_debug::unordered_multiset<debug/unordered_set>

    +

    Table 17.2. Debugging Containers C++11

    ContainerHeaderDebug containerDebug header
    std::unordered_mapunordered_map__gnu_debug::unordered_map<debug/unordered_map>
    std::unordered_multimapunordered_map__gnu_debug::unordered_multimap<debug/unordered_map>
    std::unordered_setunordered_set__gnu_debug::unordered_set<debug/unordered_set>
    std::unordered_multisetunordered_set__gnu_debug::unordered_multiset<debug/unordered_set>

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/diagnostics.html b/libstdc++-v3/doc/html/manual/diagnostics.html index 57ce05b..539e8e2 100644 --- a/libstdc++-v3/doc/html/manual/diagnostics.html +++ b/libstdc++-v3/doc/html/manual/diagnostics.html @@ -1,14 +1,13 @@ - -Chapter 5.  Diagnostics

    Chapter 5.  Diagnostics - -

    Exceptions

    API Reference

    + +

    Exceptions

    API Reference

    All exception objects are defined in one of the standard header files: exception, stdexcept, new, and @@ -23,7 +22,7 @@ found in the source documentation.

    Full API details. -

    Adding Data to exception

    +

    Adding Data to exception

    The standard exception classes carry with them a single string as data (usually describing what went wrong or where the 'throw' took place). It's good to remember that you can add your own data to @@ -40,4 +39,4 @@ int e; DBID id; // some user-defined type }; -

    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/documentation_hacking.html b/libstdc++-v3/doc/html/manual/documentation_hacking.html index 51b77f7..cd5f18e 100644 --- a/libstdc++-v3/doc/html/manual/documentation_hacking.html +++ b/libstdc++-v3/doc/html/manual/documentation_hacking.html @@ -1,9 +1,8 @@ - -Writing and Generating Documentation

    Writing and Generating Documentation

    Introduction

    Documentation for the GNU C++ Library is created from three independent sources: a manual, a FAQ, and an API reference.

    @@ -27,7 +26,7 @@ as per GNU Manuals. -

    Generating Documentation

    +

    Generating Documentation

    Certain Makefile rules are required by the GNU Coding Standards. These standard rules generate HTML, PDF, XML, or man files. For each of the generative rules, there is an additional @@ -53,7 +52,7 @@ BUILD_PDF, and BUILD_EPUB.

    Supported Makefile rules: -

    +

    make html , make install-html @@ -113,7 +112,7 @@ supported, and are always aliased to dummy rules. These unsupported formats are: info, ps, and dvi. -

    Doxygen

    Prerequisites

    Table B.1. Doxygen Prerequisites

    ToolVersionRequired By
    coreutils8.5all
    bash4.1all
    doxygen1.7.6.1all
    graphviz2.26graphical hierarchies
    pdflatex2007-59pdf output

    +

    Doxygen

    Prerequisites

    Table B.1. Doxygen Prerequisites

    ToolVersionRequired By
    coreutils8.5all
    bash4.1all
    doxygen1.7.6.1all
    graphviz2.26graphical hierarchies
    pdflatex2007-59pdf output

    Prerequisite tools are Bash 2.0 or later, Doxygen, and the GNU @@ -135,7 +134,7 @@ capacity. Specifically, the pool_size variable in the configuration file texmf.cnf may need to be increased by a minimum factor of two. -

    Generating the Doxygen Files

    +

    Generating the Doxygen Files

    The following Makefile rules run Doxygen to generate HTML docs, XML docs, XML docs as a single file, PDF docs, and the man pages. These rules are not conditional! If the required @@ -167,7 +166,7 @@ If you wish to tweak the Doxygen settings, do so by editing doc/doxygen/user.cfg.in. Notes to fellow library hackers are written in triple-# comments. -

    Debugging Generation

    +

    Debugging Generation

    Sometimes, mis-configuration of the pre-requisite tools can lead to errors when attempting to build the documentation. Here are some of the obvious errors, and ways @@ -182,7 +181,7 @@ contents of the following build directory: build/target/libstdc++-v3/doc/doxygen/latex. Pay attention to three files enclosed within, annotated as follows. -

    • +

      • refman.tex

        The actual latex file, or partial latex file. This is generated @@ -211,7 +210,7 @@ directories of header files, until the offending header is identified. Then, read the latex log files to try and find surround text, and look for that in the offending header. -

      Markup

      +

      Markup

      In general, libstdc++ files should be formatted according to the rules found in the Coding Standard. Before @@ -311,7 +310,7 @@ writing Doxygen comments. Single and double quotes, and separators in filenames are two common trouble spots. When in doubt, consult the following table. -

      Table B.2. HTML to Doxygen Markup Comparison

      HTMLDoxygen
      \\\
      "\"
      '\'
      <i>@a word
      <b>@b word
      <code>@c word
      <em>@a word
      <em><em>two words or more</em>

    Docbook

    Prerequisites

    Table B.3. Docbook Prerequisites

    ToolVersionRequired By
    docbook5-style-xsl1.76.1all
    xsltproc1.1.26all
    xmllint2.7.7validation
    dblatex0.3pdf output
    pdflatex2007-59pdf output
    docbook2X0.8.8info output
    epub3 stylesheetsb3epub output

    +

    Table B.2. HTML to Doxygen Markup Comparison

    HTMLDoxygen
    \\\
    "\"
    '\'
    <i>@a word
    <b>@b word
    <code>@c word
    <em>@a word
    <em><em>two words or more</em>

    Docbook

    Prerequisites

    Table B.3. Docbook Prerequisites

    ToolVersionRequired By
    docbook5-style-xsl1.76.1all
    xsltproc1.1.26all
    xmllint2.7.7validation
    dblatex0.3pdf output
    pdflatex2007-59pdf output
    docbook2X0.8.8info output
    epub3 stylesheetsb3epub output

    Editing the DocBook sources requires an XML editor. Many exist: some notable options include emacs, Kate, @@ -358,7 +357,7 @@ XML to Texinfo is required. The default choice is docbook2X.

    For epub output, the stylesheets for EPUB3 are required. These stylesheets are still in development. To validate the created file, epubcheck is necessary. -

    Generating the DocBook Files

    +

    Generating the DocBook Files

    The following Makefile rules generate (in order): an HTML version of all the DocBook documentation, a PDF version of the same, and a single XML document. These rules are not @@ -383,7 +382,7 @@ make XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwalsh" doc-html-docbook -

    Debugging Generation

    +

    Debugging Generation

    Sometimes, mis-configuration of the pre-requisite tools can lead to errors when attempting to build the documentation. Here are some of the obvious errors, and ways @@ -398,7 +397,7 @@ make XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwal contents of the following build directory: build/target/libstdc++-v3/doc/docbook/latex. Pay attention to three files enclosed within, annotated as follows. -

    • +

      • spine.tex

        The actual latex file, or partial latex file. This is generated @@ -435,7 +434,7 @@ make XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwal commenting out each of the largest parts of the spine.xml file, section by section, until the offending section is identified. -

      Editing and Validation

      +

      Editing and Validation

      After editing the xml sources, please make sure that the XML documentation and markup is still valid. This can be done easily, with the following validation rule: @@ -455,7 +454,7 @@ make XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwal validation on the entire manual fails.

      All Docbook xml sources should always validate. No excuses! -

      File Organization and Basics


      +

      File Organization and Basics


            Which files are important

            All Docbook files are in the directory
      @@ -515,17 +514,17 @@ make XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwal       </book>

            </set>
      -    

      Markup By Example

      +    

      Markup By Example

      Complete details on Docbook markup can be found in the DocBook Element Reference, online. An incomplete reference for HTML to Docbook conversion is detailed in the table below. -

      Table B.4. HTML to Docbook XML Markup Comparison

      HTMLDocbook
      <p><para>
      <pre><computeroutput>, <programlisting>, +

      Table B.4. HTML to Docbook XML Markup Comparison

      HTMLDocbook
      <p><para>
      <pre><computeroutput>, <programlisting>, <literallayout>
      <ul><itemizedlist>
      <ol><orderedlist>
      <il><listitem>
      <dl><variablelist>
      <dt><term>
      <dd><listitem>
      <a href=""><ulink url="">
      <code><literal>, <programlisting>
      <strong><emphasis>
      <em><emphasis>
      "<quote>

      And examples of detailed markup for which there are no real HTML equivalents are listed in the table below. -

      Table B.5. Docbook XML Element Use

      ElementUse
      <structname><structname>char_traits</structname>
      <classname><classname>string</classname>
      <function> +

      Table B.5. Docbook XML Element Use

      ElementUse
      <structname><structname>char_traits</structname>
      <classname><classname>string</classname>
      <function>

      <function>clear()</function>

      <function>fs.clear()</function>

      <type><type>long long</type>
      <varname><varname>fs</varname>
      <literal> @@ -541,4 +540,4 @@ make XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwal

      + 
      Home Porting to New Hardware or Operating Systems
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/dynamic_memory.html b/libstdc++-v3/doc/html/manual/dynamic_memory.html index 240b4d0..0602e60 100644 --- a/libstdc++-v3/doc/html/manual/dynamic_memory.html +++ b/libstdc++-v3/doc/html/manual/dynamic_memory.html @@ -1,13 +1,12 @@ - -Dynamic Memory

      Dynamic Memory

      There are six flavors each of new and delete, so make certain that you're using the right ones. Here are quickie descriptions of new: -

      • +

        • single object form, throwing a bad_alloc on errors; this is what most people are used to using @@ -69,4 +68,4 @@

        + 
      Home Termination
      \ 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 209e012..53d4126 100644 --- a/libstdc++-v3/doc/html/manual/ext_algorithms.html +++ b/libstdc++-v3/doc/html/manual/ext_algorithms.html @@ -1,9 +1,8 @@ - -Chapter 25. Algorithms

      Chapter 25. Algorithms

      25.1.6 (count, count_if) is extended with two more versions of count and count_if. The standard versions return their results. The additional signatures return void, but take a final parameter by reference to which they assign their results, e.g., @@ -15,9 +14,9 @@ copy_n (_InputIter first, _Size count, _OutputIter result);

      which copies the first 'count' elements at 'first' into 'result'.

      25.3 (sorting 'n' heaps 'n' stuff) is extended with some helper predicates. Look in the doxygen-generated pages for notes on these. -

      • is_heap tests whether or not a range is a heap.

      • is_sorted tests whether or not a range is sorted in +

        • is_heap tests whether or not a range is a heap.

        • is_sorted tests whether or not a range is sorted in nondescending order.

        25.3.8 (lexicographical_compare) is extended with

            lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1,
         				 _InputIter2 first2, _InputIter2 last2)

        which does... what? -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_compile_checks.html b/libstdc++-v3/doc/html/manual/ext_compile_checks.html index 25a1b8e..cab9b35 100644 --- a/libstdc++-v3/doc/html/manual/ext_compile_checks.html +++ b/libstdc++-v3/doc/html/manual/ext_compile_checks.html @@ -1,9 +1,8 @@ - -Chapter 16. Compile Time Checks

      Chapter 16. Compile Time Checks

      Also known as concept checking.

      In 1999, SGI added concept checkers to their implementation of the STL: code which checked the template parameters of @@ -37,4 +36,4 @@ support for template parameter constraints based on concepts in the core language. This will obviate the need for the library-simulated concept checking described above. -

      +

      \ 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 2543db0..fed1ee7 100644 --- a/libstdc++-v3/doc/html/manual/ext_concurrency.html +++ b/libstdc++-v3/doc/html/manual/ext_concurrency.html @@ -1,9 +1,8 @@ - -Chapter 30. Concurrency

      Chapter 30. Concurrency

      Design

      Interface to Locks and Mutexes

      The file <ext/concurrence.h> 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 namespace __gnu_cxx. @@ -17,7 +16,7 @@ that support multiple threads.) available locking policies: _S_single, _S_mutex, and _S_atomic. -

      • _S_single

        Indicates single-threaded code that does not need locking. +

        • _S_single

          Indicates single-threaded code that does not need locking.

        • _S_mutex

          Indicates multi-threaded code using thread-layer abstractions.

        • _S_atomic

          Indicates multi-threaded code using atomic operations.

        The compile-time constant __default_lock_policy is set @@ -33,7 +32,7 @@ critical sections, while retaining exception-safety. These types have been superseded in the ISO C++ 2011 standard by the mutex and lock types defined in the header <mutex>. -

      Interface to Atomic Functions

      +

      Interface to Atomic Functions

      Two functions and one type form the base of atomic support.

      The type _Atomic_word is a signed integral type supporting atomic operations. @@ -47,7 +46,7 @@ void __atomic_add_dispatch(volatile _Atomic_word*, int);

      Both of these functions are declared in the header file <ext/atomicity.h>, and are in namespace __gnu_cxx. -

      • +

        • __exchange_and_add_dispatch @@ -66,7 +65,7 @@ __exchange_and_add_dispatch

          Calls through to either of: -

          • __exchange_and_add +

            • __exchange_and_add

              Multi-thread version. Inlined if compiler-generated builtin atomics can be used, otherwise resolved at link time to a non-builtin code sequence. @@ -91,4 +90,4 @@ _GLIBCXX_WRITE_MEM_BARRIER

              Which expand to the appropriate write and read barrier required by the host hardware and operating system. -

        +

      \ 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 b0b4e7d..8c5efef 100644 --- a/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html +++ b/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html @@ -1,6 +1,5 @@ - -Implementation

      Implementation

      Using Builtin Atomic Functions

      The functions for atomic operations described above are either +Implementation

      Implementation

      Using Builtin Atomic Functions

      The functions for atomic operations described above are either implemented via compiler intrinsics (if the underlying host is capable) or by library fallbacks.

      Compiler intrinsics (builtins) are always preferred. However, as the compiler builtins for atomics are not universally implemented, @@ -22,14 +21,14 @@ If builtins are possible for bool-sized integral types, If builtins are possible for int-sized integral types, ATOMIC_INT_LOCK_FREE will be defined.

      For the following hosts, intrinsics are enabled by default. -

      • alpha

      • ia64

      • powerpc

      • s390

      For others, some form of -march may work. On +

      • alpha

      • ia64

      • powerpc

      • s390

      For others, some form of -march may work. On non-ancient x86 hardware, -march=native usually does the trick.

      For hosts without compiler intrinsics, but with capable hardware, hand-crafted assembly is selected. This is the case for the following hosts: -

      • cris

      • hppa

      • i386

      • i486

      • m48k

      • mips

      • sparc

      And for the rest, a simulated atomic lock via pthreads. +

      • cris

      • hppa

      • i386

      • i486

      • m48k

      • mips

      • sparc

      And for the rest, a simulated atomic lock via pthreads.

      Detailed information about compiler intrinsics for atomic operations can be found in the GCC documentation.

      More details on the library fallbacks from the porting section. -

      Thread Abstraction

      A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract +

      Thread Abstraction

      A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract the thread interface for GCC. This layer is called "gthread," and is comprised of one header file that wraps the host's default thread layer with a POSIX-like interface. @@ -42,4 +41,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 pthread_t, pthread_once_t, pthread_create, etc. -

      +

      \ 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 4e2596a..fbbd09b 100644 --- a/libstdc++-v3/doc/html/manual/ext_concurrency_use.html +++ b/libstdc++-v3/doc/html/manual/ext_concurrency_use.html @@ -1,6 +1,5 @@ - -Use

      Use

      Typical usage of the last two constructs is demonstrated as follows: +Use

      Use

      Typical usage of the last two constructs is demonstrated as follows:

       #include <ext/concurrence.h>
       
      @@ -33,4 +32,4 @@ are: __concurrence_lock_error, __co
       and __concurrence_broadcast_error.
       

      +
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_containers.html b/libstdc++-v3/doc/html/manual/ext_containers.html index b7aaf24..c6a795b 100644 --- a/libstdc++-v3/doc/html/manual/ext_containers.html +++ b/libstdc++-v3/doc/html/manual/ext_containers.html @@ -1,9 +1,8 @@ - -Chapter 23. HP/SGI Extensions

      Chapter 23. HP/SGI Extensions

      Backwards Compatibility

      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: @@ -39,4 +38,4 @@

          size_t _Find_first() const;
          size_t _Find_next (size_t prev) const;

      The same caveat given for the _Unchecked_* functions applies here also. -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_demangling.html b/libstdc++-v3/doc/html/manual/ext_demangling.html index dbbcc34..84e40e3 100644 --- a/libstdc++-v3/doc/html/manual/ext_demangling.html +++ b/libstdc++-v3/doc/html/manual/ext_demangling.html @@ -1,9 +1,8 @@ - -Chapter 29. Demangling

      Chapter 29. Demangling

      Transforming C++ ABI identifiers (like RTTI symbols) into the original C++ source identifiers is called “demangling.” @@ -71,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.) -

      +

      \ 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 0c4db7f..f3394b0 100644 --- a/libstdc++-v3/doc/html/manual/ext_io.html +++ b/libstdc++-v3/doc/html/manual/ext_io.html @@ -1,25 +1,24 @@ - -Chapter 28. Input and Output

      Chapter 28. Input and Output

      Table of Contents

      Derived filebufs

      Extensions allowing filebufs to be constructed from "C" types like FILE*s and file descriptors. -

      Derived filebufs

      The v2 library included non-standard extensions to construct +

      Derived filebufs

      The v2 library included non-standard extensions to construct std::filebufs from C stdio types such as FILE*s and POSIX file descriptors. Today the recommended way to use stdio types with libstdc++ IOStreams is via the stdio_filebuf class (see below), but earlier releases provided slightly different mechanisms. -

      • 3.0.x filebufs have another ctor with this signature: +

        • 3.0.x filebufs have another ctor with this signature: basic_filebuf(__c_file_type*, ios_base::openmode, int_type); This comes in very handy in a number of places, such as attaching Unix sockets, pipes, and anything else which uses file descriptors, into the IOStream buffering classes. The three arguments are as follows: -

          • __c_file_type* F +

            • __c_file_type* F // the __c_file_type typedef usually boils down to stdio's FILE

            • ios_base::openmode M // same as all the other uses of openmode @@ -42,4 +41,4 @@ __gnu_cxx::stdio_filebuf. This class can be constructed from a C FILE* or a file descriptor, and provides the fd() function. -

        +

      \ 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 d3a6c9c..ea3822b 100644 --- a/libstdc++-v3/doc/html/manual/ext_iterators.html +++ b/libstdc++-v3/doc/html/manual/ext_iterators.html @@ -1,14 +1,13 @@ - -Chapter 27. Iterators

      Chapter 27. Iterators

      24.3.2 describes struct iterator, 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: -

      • input_iterator

      • output_iterator

      • forward_iterator

      • bidirectional_iterator

      • random_access_iterator

      24.3.4 describes iterator operation distance, which takes +

      • input_iterator

      • output_iterator

      • forward_iterator

      • bidirectional_iterator

      • random_access_iterator

      24.3.4 describes iterator operation distance, which takes two iterators and returns a result. It is extended by another signature which takes two iterators and a reference to a result. The result is modified, and the function returns nothing. -

      +

      \ 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 2816ea8..408fa62 100644 --- a/libstdc++-v3/doc/html/manual/ext_numerics.html +++ b/libstdc++-v3/doc/html/manual/ext_numerics.html @@ -1,9 +1,8 @@ - -Chapter 26. Numerics

      Chapter 26. Numerics

      26.4, the generalized numeric operations such as accumulate, are extended with the following functions:

          power (x, n);
      @@ -21,4 +20,4 @@
          value + 1 to *(first + 1) and so on."
       

          void iota(_ForwardIter first, _ForwardIter last, _Tp value);

      The iota function is included in the ISO C++ 2011 standard. -

      +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_preface.html b/libstdc++-v3/doc/html/manual/ext_preface.html index e7d73aa..83f5479 100644 --- a/libstdc++-v3/doc/html/manual/ext_preface.html +++ b/libstdc++-v3/doc/html/manual/ext_preface.html @@ -1,9 +1,8 @@ - -

    Here we will make an attempt at describing the non-Standard extensions to the library. Some of these are from older versions of standard library components, namely SGI's STL, and some of these are @@ -24,4 +23,4 @@ extensions, be aware of two things:

    + Home Chapter 16. Compile Time Checks
    \ 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 c7bb482..e77e2c6 100644 --- a/libstdc++-v3/doc/html/manual/ext_sgi.html +++ b/libstdc++-v3/doc/html/manual/ext_sgi.html @@ -1,6 +1,5 @@ - -Deprecated

    Deprecated

    +Deprecated

    Deprecated

    The SGI hashing classes hash_set and hash_set have been deprecated by the unordered_set, unordered_multiset, unordered_map, @@ -56,4 +55,4 @@ associative containers defined in the ISO C++ 2011 standard in the headers <unordered_map> and <unordered_set>. -

    +

    \ 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 e3ecb7c..c3a9a19 100644 --- a/libstdc++-v3/doc/html/manual/ext_utilities.html +++ b/libstdc++-v3/doc/html/manual/ext_utilities.html @@ -1,14 +1,13 @@ - -Chapter 24. Utilities

    Chapter 24. Utilities

    The <functional> header contains many additional functors and helper functions, extending section 20.3. They are implemented in the file stl_function.h: -

    • identity_element for addition and multiplication. +

      • identity_element for addition and multiplication.

      • The functor identity, whose operator() returns the argument unchanged.

      • Composition functors unary_function and @@ -39,4 +38,4 @@ get_temporary_buffer(5, (int*)0);

        The specialized algorithms of section 20.4.4 are extended with uninitialized_copy_n. -

      +

    \ 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 9cbf1fe..41aceae 100644 --- a/libstdc++-v3/doc/html/manual/extensions.html +++ b/libstdc++-v3/doc/html/manual/extensions.html @@ -1,11 +1,10 @@ - -Part III.  Extensions

    Part III.  Extensions - +

    Table of Contents

    16. Compile Time Checks
    17. Debug Mode
    Intro
    Semantics
    Using
    Using the Debug Mode
    Using a Specific Debug Container
    Design
    Goals
    Methods
    The Wrapper Model
    Safe Iterators
    Safe Sequences (Containers)
    Precondition Checking
    Release- and debug-mode coexistence
    Compile-time coexistence of release- and debug-mode components
    Link- and run-time coexistence of release- and debug-mode components
    Alternatives for Coexistence
    Other Implementations
    18. Parallel Mode
    Intro
    Semantics
    Using
    Prerequisite Compiler Flags
    Using Parallel Mode
    Using Specific Parallel Components
    Design
    Interface Basics
    Configuration and Tuning
    Setting up the OpenMP Environment
    Compile Time Switches
    Run Time Settings and Defaults
    Implementation Namespaces
    Testing
    Bibliography
    19. Profile Mode
    Intro
    Using the Profile Mode
    Tuning the Profile Mode
    Design
    Wrapper Model
    Instrumentation
    Run Time Behavior
    Analysis and Diagnostics
    Cost Model
    Reports
    Testing
    Extensions for Custom Containers
    Empirical Cost Model
    Implementation Issues
    Stack Traces
    Symbolization of Instruction Addresses
    Concurrency
    Using the Standard Library in the Instrumentation Implementation
    Malloc Hooks
    Construction and Destruction of Global Objects
    Developer Information
    Big Picture
    How To Add A Diagnostic
    Diagnostics
    Diagnostic Template
    Containers
    Hashtable Too Small
    Hashtable Too Large
    Inefficient Hash
    Vector Too Small
    Vector Too Large
    Vector to Hashtable
    Hashtable to Vector
    Vector to List
    List to Vector
    List to Forward List (Slist)
    Ordered to Unordered Associative Container
    Algorithms
    Sort Algorithm Performance
    Data Locality
    Need Software Prefetch
    Linked Structure Locality
    Multithreaded Data Access
    Data Dependence Violations at Container Level
    False Sharing
    Statistics
    Bibliography
    20. The mt_allocator
    Intro
    Design Issues
    Overview
    Implementation
    Tunable Parameters
    Initialization
    Deallocation Notes
    Single Thread Example
    Multiple Thread Example
    21. The bitmap_allocator
    Design
    Implementation
    Free List Store
    Super Block
    Super Block Data Layout
    Maximum Wasted Percentage
    allocate
    deallocate
    Questions
    1
    2
    3
    Locality
    Overhead and Grow Policy
    22. Policy-Based Data Structures
    Intro
    Performance Issues
    Associative
    Priority Que
    Goals
    Associative
    Policy Choices
    Underlying Data Structures
    Iterators
    Functional
    Priority Queues
    Policy Choices
    Underlying Data Structures
    Binary Heaps
    Using
    Prerequisites
    Organization
    Tutorial
    Basic Use
    Configuring via Template Parameters @@ -69,4 +68,4 @@ Text modify Up
    Text modify Down -
    Observations
    Associative
    Priority_Queue
    Acknowledgments
    Bibliography
    23. HP/SGI Extensions
    Backwards Compatibility
    Deprecated
    24. Utilities
    25. Algorithms
    26. Numerics
    27. Iterators
    28. Input and Output
    Derived filebufs
    29. Demangling
    30. Concurrency
    Design
    Interface to Locks and Mutexes
    Interface to Atomic Functions
    Implementation
    Using Builtin Atomic Functions
    Thread Abstraction
    Use
    +
    Observations
    Associative
    Priority_Queue
    Acknowledgments
    Bibliography
    23. HP/SGI Extensions
    Backwards Compatibility
    Deprecated
    24. Utilities
    25. Algorithms
    26. Numerics
    27. Iterators
    28. Input and Output
    Derived filebufs
    29. Demangling
    30. Concurrency
    Design
    Interface to Locks and Mutexes
    Interface to Atomic Functions
    Implementation
    Using Builtin Atomic Functions
    Thread Abstraction
    Use
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/facets.html b/libstdc++-v3/doc/html/manual/facets.html index 40405c8..4ad2840 100644 --- a/libstdc++-v3/doc/html/manual/facets.html +++ b/libstdc++-v3/doc/html/manual/facets.html @@ -1,9 +1,8 @@ - -Facets

    Facets

    ctype

    Implementation

    Specializations

    For the required specialization codecvt<wchar_t, char, mbstate_t> , conversions are made between the internal character set (always UCS4 on GNU/Linux) and whatever the currently selected locale for the @@ -28,7 +27,7 @@ to wchar_t and wcsrtombs for conversions between wchar_t and char.

    Neither of these two required specializations deals with Unicode characters. -

    Future

    • +

    Future

    • How to deal with the global locale issue?

    • How to deal with different types than char, wchar_t?

    • @@ -50,30 +49,30 @@ characters.

    • Rename abstract base class. See if just smash-overriding is a better approach. Clarify, add sanity to naming. -

    Bibliography

    +

    Bibliography

    The GNU C Library - . Roland McGrath. Ulrich Drepper. Copyright © 2007 FSF. Chapters 6 Character Set Handling and 7 Locales and Internationalization.

    + . Roland McGrath. Ulrich Drepper. Copyright © 2007 FSF. Chapters 6 Character Set Handling and 7 Locales and Internationalization.

    Correspondence - . Ulrich Drepper. Copyright © 2002 .

    + . Ulrich Drepper. Copyright © 2002 .

    ISO/IEC 14882:1998 Programming languages - C++ - . Copyright © 1998 ISO.

    + . Copyright © 1998 ISO.

    ISO/IEC 9899:1999 Programming languages - C - . Copyright © 1999 ISO.

    + . Copyright © 1999 ISO.

    The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004) . Copyright © 1999 - The Open Group/The Institute of Electrical and Electronics Engineers, Inc..

    + The Open Group/The Institute of Electrical and Electronics Engineers, Inc..

    The C++ Programming Language, Special Edition . Bjarne Stroustrup. Copyright © 2000 Addison Wesley, Inc.. Appendix D. Addison Wesley - .

    + .

    Standard C++ IOStreams and Locales . Advanced Programmer's Guide and Reference . Angelika Langer. Klaus Kreft. Copyright © 2000 Addison Wesley Longman, Inc.. Addison Wesley Longman - .

    codecvt

    + .

    codecvt

    The standard class codecvt attempts to address conversions between different character encoding schemes. In particular, the standard attempts to detail conversions between the implementation-defined wide @@ -87,7 +86,7 @@ including Unicode and UTF8. Design issues and requirements are addressed, and examples of correct usage for both the required specializations for wide and narrow characters and the implementation-provided extended functionality are given. -

    Requirements

    +

    Requirements

    Around page 425 of the C++ Standard, this charming heading comes into view:

    22.2.1.5 - Template class codecvt @@ -133,7 +132,7 @@ third template parameter, stateT.

    Two: The required conversions, by specifying mbstate_t as the third template parameter, imply an implementation strategy that is mostly (or wholly) based on the underlying C library, and the functions -mcsrtombs and wcsrtombs in particular.

    Design

    wchar_t Size

    +mcsrtombs and wcsrtombs in particular.

    Design

    wchar_t Size

    The simple implementation detail of wchar_t's size seems to repeatedly confound people. Many systems use a two byte, unsigned integral type to represent wide characters, and use an @@ -145,7 +144,7 @@ mcsrtombs and wcsrtombs in particular.

    Support for Unicode

    +

    Support for Unicode

    Probably the most frequently asked question about code conversion is: "So dudes, what's the deal with Unicode strings?" The dude part is optional, but apparently the usefulness of @@ -162,7 +161,7 @@ mcsrtombs and wcsrtombs in particular.

    • +

      • Identifiers for each of the codesets involved in the conversion. For example, using the iconv family of functions from the Single Unix Specification (what used to be called @@ -213,7 +212,7 @@ mechanism may be required. Some way to enforce strict type checking on the internal and external types. As part of this, the size of the internal and external types will need to be known. -

    Other Issues

    +

    Other Issues

    In addition, multi-threaded and multi-locale environments also impact the design and requirements for code conversions. In particular, they affect the required specialization codecvt<wchar_t, char, mbstate_t> @@ -245,7 +244,7 @@ For the required specialization codecvt<wchar_t, char, mbstate_t> , conversions are made between the internal character set (always UCS4 on GNU/Linux) and whatever the currently selected locale for the LC_CTYPE category implements. -

    Implementation

    +

    Implementation

    The two required specializations are implemented as follows:

    @@ -347,7 +346,7 @@ Definitions for all the required codecvt member functions are provided for this specialization, and usage of codecvt<internal character type, external character type, encoding_state> is consistent with other codecvt usage. -

    Use

    A conversions involving string literal.

    +

    Use

    A conversions involving string literal.

       typedef codecvt_base::result                  result;
       typedef unsigned short                        unicode_t;
       typedef unicode_t                             int_type;
    @@ -384,14 +383,14 @@ codecvt usage.
       VERIFY( !int_traits::compare(i_arr, i_lit, size) );
       VERIFY( efrom_next == e_lit + size );
       VERIFY( ito_next == i_arr + size );
    -

    Future

    • +

    Future

    • a. things that are sketchy, or remain unimplemented: do_encoding, max_length and length member functions are only weakly implemented. I have no idea how to do this correctly, and in a generic manner. Nathan?

    • b. conversions involving std::string -

      • +

        • how should operators != and == work for string of different/same encoding?

        • @@ -401,7 +400,7 @@ codecvt usage. conversions between narrow, wide, and unicode strings

      • c. conversions involving std::filebuf and std::ostream -

        • +

          • how to initialize the state object in a standards-conformant manner?

          • @@ -410,50 +409,50 @@ codecvt usage.

          • wchar_t/char internal buffers and conversions between internal/external buffers? -

      Bibliography

      +

    Bibliography

    The GNU C Library . Roland McGrath. Ulrich Drepper. Copyright © 2007 FSF. Chapters 6 Character Set Handling and 7 Locales and Internationalization - .

    + .

    Correspondence - . Ulrich Drepper. Copyright © 2002 .

    + . Ulrich Drepper. Copyright © 2002 .

    ISO/IEC 14882:1998 Programming languages - C++ - . Copyright © 1998 ISO.

    + . Copyright © 1998 ISO.

    ISO/IEC 9899:1999 Programming languages - C - . Copyright © 1999 ISO.

    + . Copyright © 1999 ISO.

    System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) . Copyright © 2008 The Open Group/The Institute of Electrical and Electronics Engineers, Inc. - .

    + .

    The C++ Programming Language, Special Edition . Bjarne Stroustrup. Copyright © 2000 Addison Wesley, Inc.. Appendix D. Addison Wesley - .

    + .

    Standard C++ IOStreams and Locales . Advanced Programmer's Guide and Reference . Angelika Langer. Klaus Kreft. Copyright © 2000 Addison Wesley Longman, Inc.. Addison Wesley Longman - .

    + .

    A brief description of Normative Addendum 1 - . Clive Feather. Extended Character Sets.

    + . Clive Feather. Extended Character Sets.

    The Unicode HOWTO - . Bruno Haible.

    + . Bruno Haible.

    messages

    + . Markus Khun.

    messages

    The std::messages facet implements message retrieval functionality equivalent to Java's java.text.MessageFormat .using either GNU gettext or IEEE 1003.1-200 functions. -

    Requirements

    +

    Requirements

    The std::messages facet is probably the most vaguely defined facet in the standard library. It's assumed that this facility was built into the standard library in order to convert string literals from one @@ -502,7 +501,7 @@ be found, returns dfault. -6- Effects: Releases unspecified resources associated with cat. -7- Notes: The limit on such resources, if any, is implementation-defined. -

    Design

    +

    Design

    A couple of notes on the standard.

    First, why is messages_base::catalog specified as a typedef @@ -535,7 +534,7 @@ It is implicitly assumed that the locale for the default message string in 'get' is in the "C" locale. Thus, all source code is assumed to be written in English, so translations are always from "en_US" to other, explicitly named locales. -

    Implementation

    Models

    +

    Implementation

    Models

    This is a relatively simple class, on the face of it. The standard specifies very little in concrete terms, so generic implementations that are conforming yet do very little are the @@ -546,7 +545,7 @@ other, explicitly named locales.

    Three different mechanisms have been provided, selectable via configure flags: -

    • +

      • generic

        This model does very little, and is what is used by default. @@ -576,7 +575,7 @@ A new, standards-conformant non-virtual member function signature was added for 'open' so that a directory could be specified with a given message catalog. This simplifies calling conventions for the gnu model. -

      The GNU Model

      +

      The GNU Model

      The messages facet, because it is retrieving and converting between characters sets, depends on the ctype and perhaps the codecvt facet in a given locale. In addition, underlying "C" @@ -588,7 +587,7 @@ model. Making the message catalogs can be initially tricky, but become quite simple with practice. For complete info, see the gettext documentation. Here's an idea of what is required: -

      • +

        • Make a source file with the required string literals that need to be translated. See intl/string_literals.cc for an example. @@ -619,7 +618,7 @@ model. use_facet<messages<char> >(loc_de).open("libstdc++", locale(), dir); -

      Use

      +

    Use

    A simple example using the GNU model of message conversion.

     #include <iostream>
    @@ -641,9 +640,9 @@ void test01()
       cout << "thank you in german:" << s02 << '\n';
       mssg_de.close(cat_de);
     }
    -

    Future

    • +

    Future

    • Things that are sketchy, or remain unimplemented: -

      • +

        • _M_convert_from_char, _M_convert_to_char are in flux, depending on how the library ends up doing character set conversions. It might not be possible to do a real character @@ -691,39 +690,39 @@ void test01() model. As of this writing, it is unknown how to query to see if a specified message catalog exists using the gettext package. -

      Bibliography

      +

    Bibliography

    The GNU C Library . Roland McGrath. Ulrich Drepper. Copyright © 2007 FSF. Chapters 6 Character Set Handling, and 7 Locales and Internationalization - .

    + .

    Correspondence - . Ulrich Drepper. Copyright © 2002 .

    + . Ulrich Drepper. Copyright © 2002 .

    ISO/IEC 14882:1998 Programming languages - C++ - . Copyright © 1998 ISO.

    + . Copyright © 1998 ISO.

    ISO/IEC 9899:1999 Programming languages - C - . Copyright © 1999 ISO.

    + . Copyright © 1999 ISO.

    System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) . Copyright © 2008 The Open Group/The Institute of Electrical and Electronics Engineers, Inc. - .

    + .

    The C++ Programming Language, Special Edition . Bjarne Stroustrup. Copyright © 2000 Addison Wesley, Inc.. Appendix D. Addison Wesley - .

    + .

    Standard C++ IOStreams and Locales . Advanced Programmer's Guide and Reference . Angelika Langer. Klaus Kreft. Copyright © 2000 Addison Wesley Longman, Inc.. Addison Wesley Longman - .

    + .

    API Specifications, Java Platform . java.util.Properties, java.text.MessageFormat, java.util.Locale, java.util.ResourceBundle - .

    + .

    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/fstreams.html b/libstdc++-v3/doc/html/manual/fstreams.html index 7379ea0..85d1385 100644 --- a/libstdc++-v3/doc/html/manual/fstreams.html +++ b/libstdc++-v3/doc/html/manual/fstreams.html @@ -1,9 +1,8 @@ - -File Based Streams

    File Based Streams

    Copying a File

    So you want to copy a file quickly and easily, and most important, completely portably. And since this is C++, you have an open ifstream (call it IN) and an open ofstream (call it OUT): @@ -49,7 +48,7 @@ The operators shown above are all defined in the parent basic_ostream class and are therefore available with all possible descendants. -

    Binary Input and Output

    +

    Binary Input and Output

    The first and most important thing to remember about binary I/O is that opening a file with ios::binary is not, repeat not, the only thing you have to do. It is not a silver @@ -87,7 +86,7 @@ of formatting functions and classes to perform something which requires that formatting not be done? There are a seemingly infinite number of solutions, and a few are listed here: -

    • “Derive your own fstream-type classes and write your own +

      • “Derive your own fstream-type classes and write your own <</>> operators to do binary I/O on whatever data types you're using.”

        @@ -147,4 +146,4 @@ between arbitrary programs, or across a network, or from one invocation of a program to another invocation of the same program on a different platform, etc. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html b/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html index ba95412..a3ff015 100644 --- a/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html +++ b/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html @@ -1,15 +1,14 @@ - -Generalized Operations

    Generalized Operations

    There are four generalized functions in the <numeric> header that follow the same conventions as those in <algorithm>. Each of them is overloaded: one signature for common default operations, and a second for fully general operations. Their names are self-explanatory to anyone who works with numerics on a regular basis: -

    • accumulate

    • inner_product

    • chapterial_sum

    • adjacent_difference

    Here is a simple example of the two forms of accumulate. +

    • accumulate

    • inner_product

    • chapterial_sum

    • adjacent_difference

    Here is a simple example of the two forms of accumulate.

        int   ar[50];
        int   someval = somefunction();
    @@ -29,4 +28,4 @@
        

    + Home Interacting with C
    \ 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 f805866..82c8633 100644 --- a/libstdc++-v3/doc/html/manual/index.html +++ b/libstdc++-v3/doc/html/manual/index.html @@ -1,6 +1,5 @@ - -The GNU C++ Library Manual

    The GNU C++ Library Manual

    Paolo Carlini

    Phil Edwards

    Doug Gregor

    Benjamin Kosnik

    Dhruv Matani

    Jason Merrill

    Mark Mitchell

    Nathan Myers

    Felix Natter

    Stefan Olsson

    Silvius Rus

    Johannes Singler

    Ami Tavory

    Jonathan Wakely

    The GNU C++ Library Manual

    Paolo Carlini

    Phil Edwards

    Doug Gregor

    Benjamin Kosnik

    Dhruv Matani

    Jason Merrill

    Mark Mitchell

    Nathan Myers

    Felix Natter

    Stefan Olsson

    Silvius Rus

    Johannes Singler

    Ami Tavory

    Jonathan Wakely


    Table of Contents

    I. Introduction @@ -16,16 +15,16 @@
    Exceptions
    API Reference
    Adding Data to exception
    Concept Checking
    6. Utilities -
    Functors
    Pairs
    Memory
    Allocators
    Requirements
    Design Issues
    Implementation
    Interface Design
    Selecting Default Allocation Policy
    Disabling Memory Caching
    Using a Specific Allocator
    Custom Allocators
    Extension Allocators
    auto_ptr
    Limitations
    Use in Containers
    shared_ptr
    Requirements
    Design Issues
    Implementation
    Class Hierarchy
    Thread Safety
    Selecting Lock Policy
    Related functions and classes
    Use
    Examples
    Unresolved Issues
    Acknowledgments
    Traits
    7. +
    Functors
    Pairs
    Memory
    Allocators
    Requirements
    Design Issues
    Implementation
    Interface Design
    Selecting Default Allocation Policy
    Disabling Memory Caching
    Using a Specific Allocator
    Custom Allocators
    Extension Allocators
    auto_ptr
    Limitations
    Use in Containers
    shared_ptr
    Requirements
    Design Issues
    Implementation
    Class Hierarchy
    Thread Safety
    Selecting Lock Policy
    Related functions and classes
    Use
    Examples
    Unresolved Issues
    Acknowledgments
    Traits
    7. Strings
    String Classes
    Simple Transformations
    Case Sensitivity
    Arbitrary Character Types
    Tokenizing
    Shrink to Fit
    CString (MFC)
    8. Localization -
    Locales
    locale
    Requirements
    Design
    Implementation
    Interacting with "C" locales
    Future
    Facets
    ctype
    Implementation
    Specializations
    Future
    codecvt
    Requirements
    Design
    wchar_t Size
    Support for Unicode
    Other Issues
    Implementation
    Use
    Future
    messages
    Requirements
    Design
    Implementation
    Models
    The GNU Model
    Use
    Future
    9. +
    Locales
    locale
    Requirements
    Design
    Implementation
    Interacting with "C" locales
    Future
    Facets
    ctype
    Implementation
    Specializations
    Future
    codecvt
    Requirements
    Design
    wchar_t Size
    Support for Unicode
    Other Issues
    Implementation
    Use
    Future
    messages
    Requirements
    Design
    Implementation
    Models
    The GNU Model
    Use
    Future
    9. Containers -
    Sequences
    list
    list::size() is O(n)
    vector
    Space Overhead Management
    Associative
    Insertion Hints
    bitset
    Size Variable
    Type String
    Interacting with C
    Containers vs. Arrays
    10. +
    Sequences
    list
    list::size() is O(n)
    vector
    Space Overhead Management
    Associative
    Insertion Hints
    bitset
    Size Variable
    Type String
    Unordered Associative
    Hash Code
    Hash Code Caching Policy
    Interacting with C
    Containers vs. Arrays
    10. Iterators
    Predefined
    Iterators vs. Pointers
    One Past the End
    11. @@ -144,21 +143,21 @@ Support for C++11 dialect.
    D. GNU General Public License version 3 -
    E. GNU Free Documentation License
    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/internals.html b/libstdc++-v3/doc/html/manual/internals.html index 62a42c1..3951cf6 100644 --- a/libstdc++-v3/doc/html/manual/internals.html +++ b/libstdc++-v3/doc/html/manual/internals.html @@ -1,9 +1,8 @@ - -Porting to New Hardware or Operating Systems

    Porting to New Hardware or Operating Systems

    This document explains how to port libstdc++ (the GNU C++ library) to a new target.

    In order to make the GNU C++ library (libstdc++) work with a new @@ -20,7 +19,7 @@ works. It is difficult to test the C++ compiler without a working library, but you should at least try some minimal test cases.

    (Note that what we think of as a "target," the library refers to as a "host." The comment at the top of configure.ac explains why.) -

    Operating System

    If you are porting to a new operating system (as opposed to a new chip +

    Operating System

    If you are porting to a new operating system (as opposed to a new chip using an existing operating system), you will need to create a new directory in the config/os hierarchy. For example, the IRIX configuration files are all in config/os/irix. There is no set @@ -99,7 +98,7 @@ this: #endif

    We recommend copying an existing os_defines.h to use as a starting point. -

    CPU

    If you are porting to a new chip (as opposed to a new operating system +

    CPU

    If you are porting to a new chip (as opposed to a new operating system running on an existing chip), you will need to create a new directory in the config/cpu hierarchy. Much like the Operating system setup, there are no strict rules on how to organize the CPU configuration @@ -117,7 +116,7 @@ example, alpha, alphaev5, an

    The cpu_include_dir sets default locations for the files controlling Thread safety and Numeric limits, if the defaults are not appropriate for your chip. -

    Character Types

    The library requires that you provide three header files to implement +

    Character Types

    The library requires that you provide three header files to implement character classification, analogous to that provided by the C libraries <ctype.h> header. You can model these on the files provided in config/os/generic. However, these files will almost @@ -276,7 +275,7 @@ from __low up until __high i ++__low; return __low; } -

    Thread Safety

    The C++ library string functionality requires a couple of atomic +

    Thread Safety

    The C++ library string functionality requires a couple of atomic operations to provide thread-safety. If you don't take any special action, the library will use stub versions of these functions that are not thread-safe. They will work fine, unless your applications are @@ -331,7 +330,7 @@ must be equivalent to those provided here, but using atomic operations: { *__mem += __val; } -

    Numeric Limits

    The C++ library requires information about the fundamental data types, +

    Numeric Limits

    The C++ library requires information about the fundamental data types, such as the minimum and maximum representable values of each type. You can define each of these values individually, but it is usually easiest just to indicate how many bits are used in each of the data @@ -343,7 +342,7 @@ same values, you can provide a CPU-specific file instead so that you do not have to provide the same definitions for each operating system. To take that approach, create a new file called cpu_limits.h in your CPU configuration directory (see CPU). -

    Libtool

    The C++ library is compiled, archived and linked with libtool. +

    Libtool

    The C++ library is compiled, archived and linked with libtool. Explaining the full workings of libtool is beyond the scope of this document, but there are a few, particular bits that are necessary for porting. @@ -365,4 +364,4 @@ do this is to build the library using gcc -shared. ltcf-c.sh in the top-level directory. Find the switch statement that sets archive_cmds. Here, adjust the setting for your operating system. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/intro.html b/libstdc++-v3/doc/html/manual/intro.html index d9a8d2f..b6da970 100644 --- a/libstdc++-v3/doc/html/manual/intro.html +++ b/libstdc++-v3/doc/html/manual/intro.html @@ -1,9 +1,8 @@ - -Part I.  Introduction + +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/io.html b/libstdc++-v3/doc/html/manual/io.html index 0dfe7b9..5431985 100644 --- a/libstdc++-v3/doc/html/manual/io.html +++ b/libstdc++-v3/doc/html/manual/io.html @@ -1,14 +1,13 @@ - -Chapter 13.  Input and Output

    Iostream Objects

    To minimize the time you have to wait on the compiler, it's good to only include the headers you really need. Many people simply include <iostream> when they don't need to -- and that can penalize your runtime as well. Here are some tips on which header to use @@ -118,4 +117,4 @@ the standard objects in that source file; you'll pay less startup time. Only include the header files you need to in general; your compile times will go down when there's less parsing work to do. -

    +

    \ 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 9582fee..14eaf48 100644 --- a/libstdc++-v3/doc/html/manual/io_and_c.html +++ b/libstdc++-v3/doc/html/manual/io_and_c.html @@ -1,14 +1,13 @@ - -Interacting with C

    Interacting with C

    Using FILE* and file descriptors

    See the extensions for using FILE and file descriptors with ofstream and ifstream. -

    Performance

    +

    Performance

    Pathetic Performance? Ditch C.

    It sounds like a flame on C, but it isn't. Really. Calm down. I'm just saying it to get your attention. @@ -54,4 +53,4 @@

    + \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/iterators.html b/libstdc++-v3/doc/html/manual/iterators.html index 504d7de..cbc0224 100644 --- a/libstdc++-v3/doc/html/manual/iterators.html +++ b/libstdc++-v3/doc/html/manual/iterators.html @@ -1,14 +1,13 @@ - -Chapter 10.  Iterators

    Chapter 10.  Iterators - -

    Predefined

    Iterators vs. Pointers

    + +

    Predefined

    Iterators vs. Pointers

    The following FAQ entry points out that iterators are not implemented as pointers. They are a generalization @@ -44,7 +43,7 @@ classes. down through inheritance, so while the compiler has to do work looking up all the names, your runtime code does not. (This has been a prime concern from the beginning.) -

    One Past the End

    This starts off sounding complicated, but is actually very easy, +

    One Past the End

    This starts off sounding complicated, but is actually very easy, especially towards the end. Trust me.

    Beginners usually have a little trouble understand the whole 'past-the-end' thing, until they remember their early algebra classes @@ -127,4 +126,4 @@ classes.

    + \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/license.html b/libstdc++-v3/doc/html/manual/license.html index 1d8fb3e..f58b9a1 100644 --- a/libstdc++-v3/doc/html/manual/license.html +++ b/libstdc++-v3/doc/html/manual/license.html @@ -1,12 +1,11 @@ - -License

    License

    +License

    License

    There are two licenses affecting GNU libstdc++: one for the code, and one for the documentation.

    There is a license section in the FAQ regarding common questions. If you have more questions, ask the FSF or the gcc mailing list. -

    The Code: GPL

    +

    The Code: GPL

    The source code is distributed under the GNU General Public License version 3, with the addition under section 7 of an exception described in the “GCC Runtime Library Exception, version 3.1” @@ -87,7 +86,7 @@ requirements of the license of GCC.
        

    Hopefully that text is self-explanatory. If it isn't, you need to speak to your lawyer, or the Free Software Foundation. -

    The Documentation: GPL, FDL

    +

    The Documentation: GPL, FDL

    The documentation shipped with the library and made available over the web, excluding the pages generated from source comments, are copyrighted by the Free Software Foundation, and placed under the @@ -102,4 +101,4 @@ requirements of the license of GCC.

    If you plan on making copies of the documentation, please let us know. We can probably offer suggestions. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/localization.html b/libstdc++-v3/doc/html/manual/localization.html index 6436034..873c181 100644 --- a/libstdc++-v3/doc/html/manual/localization.html +++ b/libstdc++-v3/doc/html/manual/localization.html @@ -1,18 +1,17 @@ - -Chapter 8.  Localization

    Locales

    locale

    Describes the basic locale object, including nested classes id, facet, and the reference-counted implementation object, class _Impl. -

    Requirements

    +

    Requirements

    Class locale is non-templatized and has two distinct types nested inside of it:

    @@ -26,7 +25,7 @@ called numpunct is the data object that can be used to query for the thousands separator in the locale.

    Literally, a facet is strictly defined: -

    • +

      • Containing the following public data member:

        static locale::id id; @@ -48,14 +47,14 @@ class id

    Provides an index for looking up specific facets. -

    Design

    +

    Design

    The major design challenge is fitting an object-orientated and non-global locale design on top of POSIX and other relevant standards, which include the Single Unix (nee X/Open.)

    Because C and earlier versions of POSIX fall down so completely, portability is an issue. -

    Implementation

    Interacting with "C" locales
    • +

    Implementation

    Interacting with "C" locales
    • `locale -a` displays available locales.

       af_ZA
      @@ -385,7 +384,7 @@ global locale" (emphasis Paolo), that is:
         particular on the working of locale(""), which constructs the locale
         object from the environment of the running program, that is, in
         practice, the set of LC_ALL, LANG, etc. variable of the shell.
      -

    Future

    • +

    Future

    • Locale initialization: at what point does _S_classic, _S_global get initialized? Can named locales assume this initialization has already taken place? @@ -403,29 +402,29 @@ global locale" (emphasis Paolo), that is: What should non-required facet instantiations do? If the generic implementation is provided, then how to end-users provide specializations? -

    Bibliography

    +

    Bibliography

    The GNU C Library . Roland McGrath. Ulrich Drepper. Copyright © 2007 FSF. Chapters 6 Character Set Handling and 7 Locales and Internationalization - .

    + .

    Correspondence - . Ulrich Drepper. Copyright © 2002 .

    + . Ulrich Drepper. Copyright © 2002 .

    ISO/IEC 14882:1998 Programming languages - C++ - . Copyright © 1998 ISO.

    + . Copyright © 1998 ISO.

    ISO/IEC 9899:1999 Programming languages - C - . Copyright © 1999 ISO.

    + . Copyright © 1999 ISO.

    System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) . Copyright © 2008 The Open Group/The Institute of Electrical and Electronics Engineers, Inc. - .

    + .

    The C++ Programming Language, Special Edition . Bjarne Stroustrup. Copyright © 2000 Addison Wesley, Inc.. Appendix D. Addison Wesley - .

    + .

    Standard C++ IOStreams and Locales . Advanced Programmer's Guide and Reference @@ -434,4 +433,4 @@ global locale" (emphasis Paolo), that is: .

    + Home Facets
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/make.html b/libstdc++-v3/doc/html/manual/make.html index e7643ac..e0bc203 100644 --- a/libstdc++-v3/doc/html/manual/make.html +++ b/libstdc++-v3/doc/html/manual/make.html @@ -1,9 +1,8 @@ - -Make

    Make

    If you have never done this before, you should read the basic +Make

    Make

    If you have never done this before, you should read the basic GCC Installation Instructions first. Read all of them. Twice.

    Then type: make, and congratulations, you've started to build. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/memory.html b/libstdc++-v3/doc/html/manual/memory.html index cd48868..934cb00 100644 --- a/libstdc++-v3/doc/html/manual/memory.html +++ b/libstdc++-v3/doc/html/manual/memory.html @@ -1,15 +1,14 @@ - -Memory

    Memory

    Memory contains three general areas. First, function and operator calls via new and delete operator or member function calls. Second, allocation via allocator. And finally, smart pointer and intelligent pointer abstractions. -

    Allocators

    +

    Allocators

    Memory management for Standard Library entities is encapsulated in a class template called allocator. The allocator abstraction is used throughout the @@ -17,9 +16,9 @@ algorithms, and parts of iostreams. This class, and base classes of it, are the superset of available free store (“heap”) management classes. -

    Requirements

    +

    Requirements

    The C++ standard only gives a few directives in this area: -

    • +

      • When you add elements to a container, and the container must allocate more memory to hold them, the container makes the request via its Allocator template @@ -54,7 +53,7 @@

      Complete details can be found in the C++ standard, look in [20.4 Memory]. -

    Design Issues

    +

    Design Issues

    The easiest way of fulfilling the requirements is to call operator new each time a container needs memory, and to call operator delete each time @@ -93,7 +92,7 @@ or loading and unloading shared objects in memory. As such, using caching allocators on systems that do not support abi::__cxa_atexit is not recommended. -

    Implementation

    Interface Design

    +

    Implementation

    Interface Design

    The only allocator interface that is supported is the standard C++ interface. As such, all STL containers have been adjusted, and all external allocators have @@ -106,7 +105,7 @@

    The base class that allocator is derived from may not be user-configurable. -

    Selecting Default Allocation Policy

    +

    Selecting Default Allocation Policy

    It's difficult to pick an allocation strategy that will provide maximum utility, without excessively penalizing some behavior. In fact, it's difficult just deciding which typical actions to measure @@ -143,7 +142,7 @@ The current default choice for allocator is __gnu_cxx::new_allocator. -

    Disabling Memory Caching

    +

    Disabling Memory Caching

    In use, allocator may allocate and deallocate using implementation-specific strategies and heuristics. Because of this, a given call to an allocator object's @@ -179,7 +178,7 @@ environment, it likely means that you linked against objects built against the older library (objects which might still using the cached allocations...). -

    Using a Specific Allocator

    +

    Using a Specific Allocator

    You can specify different memory management schemes on a per-container basis, by overriding the default Allocator template parameter. For example, an easy @@ -190,7 +189,7 @@ Likewise, a debugging form of whichever allocator is currently in use:

         std::deque <int, __gnu_cxx::debug_allocator<std::allocator<int> > >  debug_deque;
    -      

    Custom Allocators

    +

    Custom Allocators

    Writing a portable C++ allocator would dictate that the interface would look much like the one specified for allocator. Additional member functions, but @@ -199,7 +198,7 @@ Probably the best place to start would be to copy one of the extension allocators: say a simple one like new_allocator. -

    Extension Allocators

    +

    Extension Allocators

    Several other allocators are provided as part of this implementation. The location of the extension allocators and their names have changed, but in all cases, functionality is @@ -310,33 +309,33 @@ of the used and unused memory locations. It has its own chapter in the documentation. -

    Bibliography

    +

    Bibliography

    ISO/IEC 14882:1998 Programming languages - C++ . isoc++_1998 - 20.4 Memory.

    + 20.4 Memory.

    The Standard Librarian: What Are Allocators Good For? . Matt Austern. C/C++ Users Journal - .

    + .

    + . Emery Berger.

    Reconsidering Custom Memory Allocation - . Emery Berger. Ben Zorn. Kathryn McKinley. Copyright © 2002 OOPSLA.

    + . Emery Berger. Ben Zorn. Kathryn McKinley. Copyright © 2002 OOPSLA.

    Allocator Types . Klaus Kreft. Angelika Langer. C/C++ Users Journal - .

    The C++ Programming Language. Bjarne Stroustrup. Copyright © 2000 . 19.4 Allocators. + .

    The C++ Programming Language. Bjarne Stroustrup. Copyright © 2000 . 19.4 Allocators. Addison Wesley - .

    Yalloc: A Recycling C++ Allocator. Felix Yen.

    auto_ptr

    Limitations

    Explaining all of the fun and delicious things that can + .

    Yalloc: A Recycling C++ Allocator. Felix Yen.

    auto_ptr

    Limitations

    Explaining all of the fun and delicious things that can happen with misuse of the auto_ptr class template (called AP here) would take some time. Suffice it to say that the use of AP @@ -387,7 +386,7 @@ to die. AP is trivial to write, however, so you could write your own auto_array_ptr for that situation (in fact, this has been done many times; check the mailing lists, Usenet, Boost, etc). -

    Use in Containers

    +

    Use in Containers

    All of the containers described in the standard library require their contained types to have, among other things, a copy constructor like this: @@ -423,16 +422,16 @@ }

    Should you try this with the checks enabled, you will see an error. -

    shared_ptr

    +

    shared_ptr

    The shared_ptr class template stores a pointer, usually obtained via new, and implements shared ownership semantics. -

    Requirements

    +

    Requirements

    The standard deliberately doesn't require a reference-counted implementation, allowing other techniques such as a circular-linked-list.

    -

    Design Issues

    +

    Design Issues

    The shared_ptr code is kindly donated to GCC by the Boost project and the original authors of the code. The basic design and algorithms are from Boost, the notes below describe details specific to @@ -446,14 +445,14 @@ drops to zero. Derived classes override those functions to destroy resources in a context where the correct dynamic type is known. This is an application of the technique known as type erasure. -

    Implementation

    Class Hierarchy

    +

    Implementation

    Class Hierarchy

    A shared_ptr<T> contains a pointer of type T* and an object of type __shared_count. The shared_count contains a pointer of type _Sp_counted_base* which points to the object that maintains the reference-counts and destroys the managed resource. -

    _Sp_counted_base<Lp>

    +

    _Sp_counted_base<Lp>

    The base of the hierarchy is parameterized on the lock policy (see below.) _Sp_counted_base doesn't depend on the type of pointer being managed, it only maintains the reference counts and calls virtual functions when @@ -493,7 +492,7 @@ C++11-only features are: rvalue-ref/move support, allocator support, aliasing constructor, make_shared & allocate_shared. Additionally, the constructors taking auto_ptr parameters are deprecated in C++11 mode. -

    Thread Safety

    +

    Thread Safety

    The Thread Safety section of the Boost shared_ptr documentation says "shared_ptr @@ -538,7 +537,7 @@ compiler, standard library, platform etc. For the version of shared_ptr in libstdc++ the compiler and library are fixed, which makes things much simpler: we have an atomic CAS or we don't, see Lock Policy below for details. -

    Selecting Lock Policy

    +

    Selecting Lock Policy

    There is a single _Sp_counted_base class, which is a template parameterized on the enum @@ -579,7 +578,7 @@ used when libstdc++ is built without --enable-threadsext/atomicity.h, which detect if the program is multi-threaded. If only one thread of execution exists in the program then less expensive non-atomic operations are used. -

    Related functions and classes
    dynamic_pointer_cast, static_pointer_cast, +

    Related functions and classes
    dynamic_pointer_cast, static_pointer_cast, const_pointer_cast

    As noted in N2351, these functions can be implemented non-intrusively using the alias constructor. However the aliasing constructor is only available @@ -612,13 +611,13 @@ is called. Users should not try to use this. As well as the extra constructors, this implementation also needs some members of _Sp_counted_deleter to be protected where they could otherwise be private. -

    Use

    Examples

    +

    Use

    Examples

    Examples of use can be found in the testsuite, under testsuite/tr1/2_general_utilities/shared_ptr, testsuite/20_util/shared_ptr and testsuite/20_util/weak_ptr. -

    Unresolved Issues

    +

    Unresolved Issues

    The shared_ptr atomic access clause in the C++11 standard is not implemented in GCC.

    @@ -654,33 +653,33 @@ be private.

    tr1::_Sp_deleter could be a private member of tr1::__shared_count but it would alter the ABI. -

    Acknowledgments

    +

    Acknowledgments

    The original authors of the Boost shared_ptr, which is really nice code to work with, Peter Dimov in particular for his help and invaluable advice on thread safety. Phillip Jordan and Paolo Carlini for the lock policy implementation. -

    + .

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/mt_allocator.html b/libstdc++-v3/doc/html/manual/mt_allocator.html index a0c1f58..0626bcc 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator.html @@ -1,10 +1,9 @@ - -Chapter 20. The mt_allocator

    Chapter 20. The mt_allocator

    +

    Intro

    The mt allocator [hereinafter referred to simply as "the allocator"] is a fixed size (power of two) allocator that was initially developed specifically to suit the needs of multi threaded @@ -20,4 +19,4 @@

    The aim of this document is to describe - from an application point of view - the "inner workings" of the allocator. -

    +

    \ 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 9cb6e23..bf63532 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator_design.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator_design.html @@ -1,6 +1,5 @@ - -Design Issues

    Design Issues

    Overview

    There are three general components to the allocator: a datum +Design Issues

    Design Issues

    Overview

    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 @@ -36,4 +35,4 @@ tuning, for instance.

    This class has the interface required for standard library allocator classes, namely member functions allocate and deallocate, plus others. -

    +

    \ 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 2aa8f1a..c971e0c 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html @@ -1,6 +1,5 @@ - -Multiple Thread Example

    Multiple Thread Example

    +Multiple Thread Example

    Multiple Thread Example

    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.

    @@ -104,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. -

    +

    \ 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 4957db9..c82c6e7 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html @@ -1,6 +1,5 @@ - -Single Thread Example

    Single Thread Example

    +Single Thread Example

    Single Thread Example

    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):

    @@ -76,4 +75,4 @@ of the global freelist and update the pointer as needed
     The decision to add deallocated blocks to the front of the freelist was made
     after a set of performance measurements that showed that this is roughly 10%
     faster than maintaining a set of "last pointers" as well.
    -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/mt_allocator_impl.html b/libstdc++-v3/doc/html/manual/mt_allocator_impl.html index 4b27c48..a93f2a0 100644 --- a/libstdc++-v3/doc/html/manual/mt_allocator_impl.html +++ b/libstdc++-v3/doc/html/manual/mt_allocator_impl.html @@ -1,9 +1,8 @@ - -Implementation

    Implementation

    Tunable Parameters

    Certain allocation parameters can be modified, or tuned. There +Implementation

    Implementation

    Tunable Parameters

    Certain allocation parameters can be modified, or tuned. There exists a nested struct __pool_base::_Tune that contains all these parameters, which include settings for -

    • Alignment

    • Maximum bytes before calling ::operator new directly

    • Minimum bytes

    • Size of underlying global allocations

    • Maximum number of supported threads

    • Migration of deallocations to the global free list

    • Shunt for global new and delete

    Adjusting parameters for a given instance of an allocator can only +

    • Alignment

    • Maximum bytes before calling ::operator new directly

    • Minimum bytes

    • Size of underlying global allocations

    • Maximum number of supported threads

    • Migration of deallocations to the global free list

    • Shunt for global new and delete

    Adjusting parameters for a given instance of an allocator can only happen before any allocations take place, when the allocator itself is initialized. For instance:

    @@ -39,7 +38,7 @@ int main()
     
       return 0;
     }
    -

    Initialization

    +

    Initialization

    The static variables (pointers to freelists, tuning parameters etc) are initialized as above, or are set to the global defaults.

    @@ -131,7 +130,7 @@ The _S_initialize() function: for this specific bin. This only occurs when a number of blocks are grabbed from the global list to a thread specific list or when a thread decides to return some blocks to the global freelist. -

    Deallocation Notes

    Notes about deallocation. This allocator does not explicitly +

    Deallocation Notes

    Notes about deallocation. This allocator does not explicitly release memory. Because of this, memory debugging programs like valgrind or purify may notice leaks: sorry about this inconvenience. Operating systems will reclaim allocated memory at @@ -158,4 +157,4 @@ implementation-specific, and subject to change. For an example of a pool that frees memory, see the following example. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/numerics.html b/libstdc++-v3/doc/html/manual/numerics.html index 9bd9952..26e5afb 100644 --- a/libstdc++-v3/doc/html/manual/numerics.html +++ b/libstdc++-v3/doc/html/manual/numerics.html @@ -1,15 +1,14 @@ - -Chapter 12.  Numerics

    Chapter 12.  Numerics - -

    Complex

    -

    complex Processing

    + +

    Complex

    +

    complex Processing

    Using complex<> becomes even more comple- er, sorry, complicated, with the not-quite-gratuitously-incompatible addition of complex types to the C language. David Tribble has @@ -31,4 +30,4 @@

    + Home Generalized Operations \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/numerics_and_c.html b/libstdc++-v3/doc/html/manual/numerics_and_c.html index e1ddbe9..9cb5523 100644 --- a/libstdc++-v3/doc/html/manual/numerics_and_c.html +++ b/libstdc++-v3/doc/html/manual/numerics_and_c.html @@ -1,9 +1,8 @@ - -Interacting with C

    Interacting with C

    Numerics vs. Arrays

    One of the major reasons why FORTRAN can chew through numbers so well is that it is defined to be free of pointer aliasing, an assumption that C89 is not allowed to make, and neither is C++98. C99 adds a new keyword, restrict, to apply to individual pointers. The @@ -18,7 +17,7 @@ speaking this is only one of the five template classes, and they are designed to be familiar to people who have worked with the BLAS libraries before. -

    C99

    In addition to the other topics on this page, we'll note here some +

    C99

    In addition to the other topics on this page, we'll note here some of the C99 features that appear in libstdc++.

    The C99 features depend on the --enable-c99 configure flag. This flag is already on by default, but it can be disabled by the @@ -34,4 +33,4 @@

    + \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/pairs.html b/libstdc++-v3/doc/html/manual/pairs.html index a02f349..2b1dc9e 100644 --- a/libstdc++-v3/doc/html/manual/pairs.html +++ b/libstdc++-v3/doc/html/manual/pairs.html @@ -1,9 +1,8 @@ - -Pairs

    Pairs

    The pair<T1,T2> is a simple and handy way to carry around a pair of objects. One is of type T1, and another of type T2; they may be the same type, but you don't get anything extra if they are. The two members can be accessed directly, as @@ -41,4 +40,4 @@

    + Home Memory \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/parallel_mode.html b/libstdc++-v3/doc/html/manual/parallel_mode.html index fec97e5..55b53fa 100644 --- a/libstdc++-v3/doc/html/manual/parallel_mode.html +++ b/libstdc++-v3/doc/html/manual/parallel_mode.html @@ -1,9 +1,8 @@ - -Chapter 18. Parallel Mode

    Chapter 18. Parallel Mode

    The libstdc++ parallel mode is an experimental parallel implementation of many algorithms the C++ Standard Library.

    Several of the standard algorithms, for instance @@ -11,14 +10,14 @@ Several of the standard algorithms, for instance annotations. These parallel mode constructs and can be invoked by explicit source declaration or by compiling existing sources with a specific compiler flag. -

    Intro

    The following library components in the include -numeric are included in the parallel mode:

    • std::accumulate

    • std::adjacent_difference

    • std::inner_product

    • std::partial_sum

    The following library components in the include -algorithm are included in the parallel mode:

    • std::adjacent_find

    • std::count

    • std::count_if

    • std::equal

    • std::find

    • std::find_if

    • std::find_first_of

    • std::for_each

    • std::generate

    • std::generate_n

    • std::lexicographical_compare

    • std::mismatch

    • std::search

    • std::search_n

    • std::transform

    • std::replace

    • std::replace_if

    • std::max_element

    • std::merge

    • std::min_element

    • std::nth_element

    • std::partial_sort

    • std::partition

    • std::random_shuffle

    • std::set_union

    • std::set_intersection

    • std::set_symmetric_difference

    • std::set_difference

    • std::sort

    • std::stable_sort

    • std::unique_copy

    Bibliography

    +

    Intro

    The following library components in the include +numeric are included in the parallel mode:

    • std::accumulate

    • std::adjacent_difference

    • std::inner_product

    • std::partial_sum

    The following library components in the include +algorithm are included in the parallel mode:

    • std::adjacent_find

    • std::count

    • std::count_if

    • std::equal

    • std::find

    • std::find_if

    • std::find_first_of

    • std::for_each

    • std::generate

    • std::generate_n

    • std::lexicographical_compare

    • std::mismatch

    • std::search

    • std::search_n

    • std::transform

    • std::replace

    • std::replace_if

    • std::max_element

    • std::merge

    • std::min_element

    • std::nth_element

    • std::partial_sort

    • std::partition

    • std::random_shuffle

    • std::set_union

    • std::set_intersection

    • std::set_symmetric_difference

    • std::set_difference

    • std::sort

    • std::stable_sort

    • std::unique_copy

    Bibliography

    Parallelization of Bulk Operations for STL Dictionaries . Johannes Singler. Leonor Frias. Copyright © 2007 . Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS) - .

    + .

    The Multi-Core Standard Template Library . Johannes Singler. Peter Sanders. Felix Putze. Copyright © 2007 . Euro-Par 2007: Parallel Processing. (LNCS 4641) - .

    + .

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/parallel_mode_design.html b/libstdc++-v3/doc/html/manual/parallel_mode_design.html index e0c1970..5c26d90 100644 --- a/libstdc++-v3/doc/html/manual/parallel_mode_design.html +++ b/libstdc++-v3/doc/html/manual/parallel_mode_design.html @@ -1,7 +1,6 @@ - -Design

    Design

    -

    Interface Basics

    +Design

    Design

    +

    Interface Basics

    All parallel algorithms are intended to have signatures that are equivalent to the ISO C++ algorithms replaced. For instance, the std::adjacent_find function is declared as: @@ -36,13 +35,13 @@ function, if no parallel functions are deemed worthy), based on either compile-time or run-time conditions.

    The available signature options are specific for the different algorithms/algorithm classes.

    The general view of overloads for the parallel algorithms look like this: -

    • ISO C++ signature

    • ISO C++ signature + sequential_tag argument

    • ISO C++ signature + algorithm-specific tag type +

      • ISO C++ signature

      • ISO C++ signature + sequential_tag argument

      • ISO C++ signature + algorithm-specific tag type (several signatures)

      Please note that the implementation may use additional functions (designated with the _switch suffix) to dispatch from the ISO C++ signature to the correct parallel version. Also, some of the algorithms do not have support for run-time conditions, so the last overload is therefore missing. -

    Configuration and Tuning

    Setting up the OpenMP Environment

    +

    Configuration and Tuning

    Setting up the OpenMP Environment

    Several aspects of the overall runtime environment can be manipulated by standard OpenMP function calls.

    @@ -72,7 +71,7 @@ Other parts of the runtime environment able to be manipulated include nested parallelism (omp_set_nested), schedule kind (omp_set_schedule), and others. See the OpenMP documentation for more information. -

    Compile Time Switches

    +

    Compile Time Switches

    To force an algorithm to execute sequentially, even though parallelism is switched on in general via the macro _GLIBCXX_PARALLEL, add __gnu_parallel::sequential_tag() to the end @@ -126,7 +125,7 @@ several additional choices, namely __gnu_parallel::balanced_quicksort_tag. Multiway mergesort comes with the two splitting strategies for multi-way merging. The quicksort options cannot be used for stable_sort. -

    Run Time Settings and Defaults

    +

    Run Time Settings and Defaults

    The default parallelization strategy, the choice of specific algorithm strategy, the minimum threshold limits for individual parallel algorithms, and aspects of the underlying hardware can be specified as @@ -194,7 +193,7 @@ int main() return 0; } -

    Implementation Namespaces

    One namespace contain versions of code that are always +

    Implementation Namespaces

    One namespace contain versions of code that are always explicitly sequential: __gnu_serial.

    Two namespaces contain the parallel mode: @@ -210,4 +209,4 @@ __gnu_parallel.

    More information, and an organized index of types and functions related to the parallel mode on a per-namespace basis, can be found in the generated source documentation. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html b/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html index 03595f4..9fae4a3 100644 --- a/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html +++ b/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html @@ -1,6 +1,5 @@ - -Semantics

    Semantics

    The parallel mode STL algorithms are currently not exception-safe, +Semantics

    Semantics

    The parallel mode STL algorithms are currently not exception-safe, i.e. user-defined functors must not throw exceptions. Also, the order of execution is not guaranteed for some functions, of course. Therefore, user-defined functors should not have any concurrent side effects. @@ -8,4 +7,4 @@ Therefore, user-defined functors should not have any concurrent side effects. OpenMP parallel regions in concurrent threads, it is not possible to call parallel STL algorithm in concurrent threads, either. -It might work with other compilers, though.

    +It might work with other compilers, though.

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/parallel_mode_test.html b/libstdc++-v3/doc/html/manual/parallel_mode_test.html index 7e928e8..9d90287 100644 --- a/libstdc++-v3/doc/html/manual/parallel_mode_test.html +++ b/libstdc++-v3/doc/html/manual/parallel_mode_test.html @@ -1,6 +1,5 @@ - -Testing

    Testing

    +Testing

    Testing

    Both the normal conformance and regression tests and the supplemental performance tests work.

    @@ -23,4 +22,4 @@ additional software dependencies than the usual bare-boned text file, and can be generated by using the make doc-performance rule in the testsuite's Makefile. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/parallel_mode_using.html b/libstdc++-v3/doc/html/manual/parallel_mode_using.html index 0b2a784..68a0c1f 100644 --- a/libstdc++-v3/doc/html/manual/parallel_mode_using.html +++ b/libstdc++-v3/doc/html/manual/parallel_mode_using.html @@ -1,6 +1,5 @@ - -Using

    Using

    Prerequisite Compiler Flags

    +Using

    Using

    Prerequisite Compiler Flags

    Any use of parallel functionality requires additional compiler and runtime support, in particular support for OpenMP. Adding this support is not difficult: just compile your application with the compiler @@ -17,7 +16,7 @@ In addition, hardware that supports atomic operations and a compiler as -march=i686, -march=native or -mcpu=v9. See the GCC manual for more information. -

    Using Parallel Mode

    +

    Using Parallel Mode

    To use the libstdc++ parallel mode, compile your application with the prerequisite flags as detailed above, and in addition add -D_GLIBCXX_PARALLEL. This will convert all @@ -34,7 +33,7 @@ In addition, hardware that supports atomic operations and a compiler if no instantiation of a container is passed between the two translation units. Parallel mode functionality has distinct linkage, and cannot be confused with normal mode symbols. -

    Using Specific Parallel Components

    When it is not feasible to recompile your entire application, or +

    Using Specific Parallel Components

    When it is not feasible to recompile your entire application, or only specific algorithms need to be parallel-aware, individual parallel algorithms can be made available explicitly. These parallel algorithms are functionally equivalent to the standard @@ -63,4 +62,4 @@ Then compile this code with the prerequisite compiler flags flags for atomic operations.)

    The following table provides the names and headers of all the parallel algorithms that can be used in a similar manner: -

    Table 18.1. Parallel Algorithms

    AlgorithmHeaderParallel algorithmParallel header
    std::accumulatenumeric__gnu_parallel::accumulateparallel/numeric
    std::adjacent_differencenumeric__gnu_parallel::adjacent_differenceparallel/numeric
    std::inner_productnumeric__gnu_parallel::inner_productparallel/numeric
    std::partial_sumnumeric__gnu_parallel::partial_sumparallel/numeric
    std::adjacent_findalgorithm__gnu_parallel::adjacent_findparallel/algorithm
    std::countalgorithm__gnu_parallel::countparallel/algorithm
    std::count_ifalgorithm__gnu_parallel::count_ifparallel/algorithm
    std::equalalgorithm__gnu_parallel::equalparallel/algorithm
    std::findalgorithm__gnu_parallel::findparallel/algorithm
    std::find_ifalgorithm__gnu_parallel::find_ifparallel/algorithm
    std::find_first_ofalgorithm__gnu_parallel::find_first_ofparallel/algorithm
    std::for_eachalgorithm__gnu_parallel::for_eachparallel/algorithm
    std::generatealgorithm__gnu_parallel::generateparallel/algorithm
    std::generate_nalgorithm__gnu_parallel::generate_nparallel/algorithm
    std::lexicographical_comparealgorithm__gnu_parallel::lexicographical_compareparallel/algorithm
    std::mismatchalgorithm__gnu_parallel::mismatchparallel/algorithm
    std::searchalgorithm__gnu_parallel::searchparallel/algorithm
    std::search_nalgorithm__gnu_parallel::search_nparallel/algorithm
    std::transformalgorithm__gnu_parallel::transformparallel/algorithm
    std::replacealgorithm__gnu_parallel::replaceparallel/algorithm
    std::replace_ifalgorithm__gnu_parallel::replace_ifparallel/algorithm
    std::max_elementalgorithm__gnu_parallel::max_elementparallel/algorithm
    std::mergealgorithm__gnu_parallel::mergeparallel/algorithm
    std::min_elementalgorithm__gnu_parallel::min_elementparallel/algorithm
    std::nth_elementalgorithm__gnu_parallel::nth_elementparallel/algorithm
    std::partial_sortalgorithm__gnu_parallel::partial_sortparallel/algorithm
    std::partitionalgorithm__gnu_parallel::partitionparallel/algorithm
    std::random_shufflealgorithm__gnu_parallel::random_shuffleparallel/algorithm
    std::set_unionalgorithm__gnu_parallel::set_unionparallel/algorithm
    std::set_intersectionalgorithm__gnu_parallel::set_intersectionparallel/algorithm
    std::set_symmetric_differencealgorithm__gnu_parallel::set_symmetric_differenceparallel/algorithm
    std::set_differencealgorithm__gnu_parallel::set_differenceparallel/algorithm
    std::sortalgorithm__gnu_parallel::sortparallel/algorithm
    std::stable_sortalgorithm__gnu_parallel::stable_sortparallel/algorithm
    std::unique_copyalgorithm__gnu_parallel::unique_copyparallel/algorithm

    +

    Table 18.1. Parallel Algorithms

    AlgorithmHeaderParallel algorithmParallel header
    std::accumulatenumeric__gnu_parallel::accumulateparallel/numeric
    std::adjacent_differencenumeric__gnu_parallel::adjacent_differenceparallel/numeric
    std::inner_productnumeric__gnu_parallel::inner_productparallel/numeric
    std::partial_sumnumeric__gnu_parallel::partial_sumparallel/numeric
    std::adjacent_findalgorithm__gnu_parallel::adjacent_findparallel/algorithm
    std::countalgorithm__gnu_parallel::countparallel/algorithm
    std::count_ifalgorithm__gnu_parallel::count_ifparallel/algorithm
    std::equalalgorithm__gnu_parallel::equalparallel/algorithm
    std::findalgorithm__gnu_parallel::findparallel/algorithm
    std::find_ifalgorithm__gnu_parallel::find_ifparallel/algorithm
    std::find_first_ofalgorithm__gnu_parallel::find_first_ofparallel/algorithm
    std::for_eachalgorithm__gnu_parallel::for_eachparallel/algorithm
    std::generatealgorithm__gnu_parallel::generateparallel/algorithm
    std::generate_nalgorithm__gnu_parallel::generate_nparallel/algorithm
    std::lexicographical_comparealgorithm__gnu_parallel::lexicographical_compareparallel/algorithm
    std::mismatchalgorithm__gnu_parallel::mismatchparallel/algorithm
    std::searchalgorithm__gnu_parallel::searchparallel/algorithm
    std::search_nalgorithm__gnu_parallel::search_nparallel/algorithm
    std::transformalgorithm__gnu_parallel::transformparallel/algorithm
    std::replacealgorithm__gnu_parallel::replaceparallel/algorithm
    std::replace_ifalgorithm__gnu_parallel::replace_ifparallel/algorithm
    std::max_elementalgorithm__gnu_parallel::max_elementparallel/algorithm
    std::mergealgorithm__gnu_parallel::mergeparallel/algorithm
    std::min_elementalgorithm__gnu_parallel::min_elementparallel/algorithm
    std::nth_elementalgorithm__gnu_parallel::nth_elementparallel/algorithm
    std::partial_sortalgorithm__gnu_parallel::partial_sortparallel/algorithm
    std::partitionalgorithm__gnu_parallel::partitionparallel/algorithm
    std::random_shufflealgorithm__gnu_parallel::random_shuffleparallel/algorithm
    std::set_unionalgorithm__gnu_parallel::set_unionparallel/algorithm
    std::set_intersectionalgorithm__gnu_parallel::set_intersectionparallel/algorithm
    std::set_symmetric_differencealgorithm__gnu_parallel::set_symmetric_differenceparallel/algorithm
    std::set_differencealgorithm__gnu_parallel::set_differenceparallel/algorithm
    std::sortalgorithm__gnu_parallel::sortparallel/algorithm
    std::stable_sortalgorithm__gnu_parallel::stable_sortparallel/algorithm
    std::unique_copyalgorithm__gnu_parallel::unique_copyparallel/algorithm

    \ 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 88e459b..932a82a 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,6 +1,5 @@ - -Testing

    Testing

    Regression

    The library contains a single comprehensive regression test. +Testing

    Testing

    Regression

    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., std::set). It @@ -23,9 +22,9 @@ configured to use this allocator.

    For granularity, the test is split into the several sources, each checking only some containers.

    For more details, consult the files in testsuite/ext/pb_ds/regression. -

    Performance

    Hash-Based

    +

    Performance

    Hash-Based

    Text find -

    +

    Description

    This test inserts a number of values with keys from an @@ -41,7 +40,7 @@ filethirty_years_among_the_dead_preproc.txt

    The test checks the effect of different range-hashing functions, trigger policies, and cache-hashing policies. -

    +

    Results

    The graphic below show the results for the native and collision-chaining hash types the the function @@ -144,7 +143,7 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    In this setting, the range-hashing scheme affects performance more than other policies. As the results show, containers using @@ -159,9 +158,9 @@ library's implementation. (Unfortunately, it was not possible to run the tests with std::tr1::unordered_map 's cache_hash_code = true , as it appeared to - malfuntion.)

    + malfuntion.)

    Integer find -

    +

    Description

    This test inserts a number of values with uniform integer keys into a container, then performs a series of finds @@ -172,7 +171,7 @@ performance/ext/pb_ds/random_int_find_timing.cc

    The test checks the effect of different underlying hash-tables, - range-hashing functions, and trigger policies.

    + range-hashing functions, and trigger policies.

    Results

    There are two sets of results for this type, one for @@ -345,7 +344,7 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    In this setting, the choice of underlying hash-table affects performance most, then the range-hashing scheme and, only finally, @@ -361,9 +360,9 @@ above graphics should be noted that std::tr1::unordered_map are hard-wired currently to mod-based schemes. -

    +

    Integer Subscript find -

    +

    Description

    This test inserts a number of values with uniform integer keys into a container, then performs a series of finds @@ -373,7 +372,7 @@ It uses the test file: performance/ext/pb_ds/random_int_subscript_find_timing.cc

    The test checks the effect of different underlying - hash-tables, range-hashing functions, and trigger policies.

    + hash-tables, range-hashing functions, and trigger policies.

    Results

    There are two sets of results for this type, one for @@ -545,12 +544,12 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    This test shows similar results to Hash-Based - Integer find Find Timing test.

    + Integer find Find Timing test.

    Integer Subscript insert -

    +

    Description

    This test inserts a number of values with uniform i.i.d. integer keys into a container, using @@ -560,7 +559,7 @@ It uses the test file: performance/ext/pb_ds/random_int_subscript_insert_timing.cc

    The test checks the effect of different underlying - hash-tables.

    + hash-tables.

    Results

    There are two sets of results for this type, one for @@ -732,7 +731,7 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    In this setting, as in Hash-Based Text find Find Timing test and Hash-Based @@ -761,9 +760,9 @@ find Find Timing Test and Hash-Based Integer find Find Timing Test. Unsurprisingly, however, containers with lower αmax perform worse in this case, - since more re-hashes are performed.

    + since more re-hashes are performed.

    Integer find with Skewed-Distribution -

    +

    Description

    This test inserts a number of values with a markedly non-uniform integer keys into a container, then performs @@ -774,7 +773,7 @@ It uses the test file: performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc

    The test checks the effect of different range-hashing - functions and trigger policies.

    + functions and trigger policies.

    Results

    The graphic below show the results for the native, collision-chaining, and general-probing hash types.

    @@ -857,7 +856,7 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    In this setting, the distribution of keys is so skewed that the underlying hash-table type affects performance marginally. @@ -884,9 +883,9 @@ performance is bad, a χ2 test can be used to check how to transform it into a more uniform distribution.

    For this reason, this library's default range-hashing - function is mask-based.

    + function is mask-based.

    Erase Memory Use -

    +

    Description

    This test inserts a number of uniform integer keys into a container, then erases all keys except one. It measures @@ -894,7 +893,7 @@ It uses the test file: performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc

    The test checks how containers adjust internally as their - logical size decreases.

    + logical size decreases.

    Results

    The graphic below show the results for the native, collision-chaining, and general-probing hash types.

    @@ -977,7 +976,7 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    The standard's hash-based containers act very differently than trees in this respect. When erasing numerous keys from an standard @@ -985,9 +984,9 @@ depending on whether the container is tree-based or hash-based. This is a fundamental consequence of the standard's interface for associative containers, and it is not due to a specific - implementation.

    Branch-Based

    + implementation.

    Branch-Based

    Text insert -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([ wickland96thirty ]) into a container @@ -997,7 +996,7 @@ data structures.

    It uses the test file: performance/ext/pb_ds/tree_text_insert_timing.cc -

    +

    Results

    The three graphics below show the results for the native tree and this library's node-based trees, the native tree and @@ -1078,7 +1077,7 @@ Node_update null_node_update -

    +
    Observations

    Observing the first graphic implies that for this setting, a splay tree (tree with Tag @@ -1098,9 +1097,9 @@ encountered, a new "hash-table" is built A large fan-out PATRICIA trie, however, doe does well in look-ups (see Branch-Based Text find Find Timing Test). It may be - beneficial in semi-static settings.

    + beneficial in semi-static settings.

    Text find -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([wickland96thirty]) into @@ -1111,7 +1110,7 @@ It uses the test file: performance/ext/pb_ds/text_find_timing.cc

    The test checks the effect of different underlying - data structures.

    + data structures.

    Results

    The graphic immediately below shows the results for the native tree type and several other tree types. @@ -1170,7 +1169,7 @@ Node_Update null_node_update -

    +
    Observations

    For this setting, a splay tree (tree with Tag @@ -1203,9 +1202,9 @@ by a sub-trie. A large-fan-out PATRICIA trie does not do well on modifications (see Tree-Based and Trie-Based Text Insert Timing Test). Therefore, it is possibly beneficial in - semi-static settings.

    + semi-static settings.

    Text find with Locality-of-Reference -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([ wickland96thirty ]) into @@ -1219,7 +1218,7 @@ It uses the test file: performance/ext/pb_ds/tree_text_lor_find_timing.cc

    The test checks the effect of different underlying - data structures in a locality-of-reference setting.

    + data structures in a locality-of-reference setting.

    Results

    The graphic immediately below shows the results for the native tree type and several other tree types. @@ -1278,7 +1277,7 @@ Node_Update null_node_update -

    +
    Observations

    For this setting, an ordered-vector tree (tree with Tag @@ -1288,9 +1287,9 @@ tree all share approximately the same performance.

    A splay tree (tree with Tag = splay_tree_tag) does much better, since each (successful) find "bubbles" the - corresponding node to the root of the tree.

    + corresponding node to the root of the tree.

    split and join -

    +

    Description

    This test a container, inserts into a number of values, splits the container at the median, and joins the two containers. (If the @@ -1307,7 +1306,7 @@ implication, this test checks the most efficient way to erase a sub-sequence from a tree-like-based container, since this can always be performed by a small sequence of splits and joins. -

    +

    Results

    The graphic immediately below shows the results for the native tree type and several other tree types. @@ -1366,7 +1365,7 @@ Node_Update null_node_update -

    +
    Observations

    In this test, the native red-black trees must be split and joined externally, through a sequence of erase and @@ -1393,9 +1392,9 @@ via container_traits).

    It is important to note that split and join are not esoteric methods - they are the most efficient means of erasing a contiguous range of values from a - tree based container.

    + tree based container.

    Order-Statistics -

    +

    Description

    This test creates a container, inserts random integers into the the container, and then checks the order-statistics of the @@ -1410,7 +1409,7 @@ It uses the test file: performance/ext/pb_ds/tree_order_statistics_timing.cc

    The test checks the performance difference of policies based - on node-invariant as opposed to a external functions.

    + on node-invariant as opposed to a external functions.

    Results

    The graphic immediately below shows the results for the native tree type and several other tree types. @@ -1445,7 +1444,7 @@ Node_Update tree_order_statistics_node_update -

    +
    Observations

    In this test, the native red-black tree can support order-statistics queries only externally, by performing a @@ -1462,9 +1461,9 @@ tree (tree with Tag = rb_tree_tag ) is logarithmic in the number of elements. Consequently, the splay - tree has worse performance than the red-black tree.

    Multimap

    + tree has worse performance than the red-black tree.

    Multimap

    Text find with Small Secondary-to-Primary Key Ratios -

    +

    Description

    This test inserts a number of pairs into a container. The first item of each pair is a string from an arbitrary text @@ -1483,7 +1482,7 @@ It uses the test file: performance/ext/pb_ds/multimap_text_find_timing_small.cc

    The test checks the find-time scalability of different - "multimap" designs.

    + "multimap" designs.

    Results

    The graphic below show the results for "multimaps" which use a tree-based container for primary keys. @@ -1631,12 +1630,12 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    See Observations::Mapping-Semantics - Considerations.

    + Considerations.

    Text find with Large Secondary-to-Primary Key Ratios -

    +

    Description

    This test inserts a number of pairs into a container. The first item of each pair is a string from an arbitrary text @@ -1654,7 +1653,7 @@ It uses the test file: performance/ext/pb_ds/multimap_text_find_timing_large.cc

    The test checks the find-time scalability of different - "multimap" designs.

    + "multimap" designs.

    Results

    The graphic below show the results for "multimaps" which use a tree-based container for primary keys. @@ -1802,13 +1801,13 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    See Observations::Mapping-Semantics - Considerations.

    + Considerations.

    Text insert with Small Secondary-to-Primary Key Ratios -

    +

    Description

    This test inserts a number of pairs into a container. The first item of each pair is a string from an arbitrary text @@ -1828,7 +1827,7 @@ It uses the test file: performance/ext/pb_ds/multimap_text_insert_timing_small.cc

    The test checks the insert-time scalability of different - "multimap" designs.

    + "multimap" designs.

    Results

    The graphic below show the results for "multimaps" which use a tree-based container for primary keys. @@ -1976,13 +1975,13 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    See Observations::Mapping-Semantics - Considerations.

    + Considerations.

    Text insert with Small Secondary-to-Primary Key Ratios -

    +

    Description

    This test inserts a number of pairs into a container. The first item of each pair is a string from an arbitrary text @@ -2002,7 +2001,7 @@ It uses the test file: performance/ext/pb_ds/multimap_text_insert_timing_large.cc

    The test checks the insert-time scalability of different - "multimap" designs.

    + "multimap" designs.

    Results

    The graphic below show the results for "multimaps" which use a tree-based container for primary keys. @@ -2150,13 +2149,13 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    See Observations::Mapping-Semantics - Considerations.

    + Considerations.

    Text insert with Small Secondary-to-Primary Key Ratios Memory Use -

    +

    Description

    This test inserts a number of pairs into a container. The first item of each pair is a string from an arbitrary text @@ -2171,7 +2170,7 @@ It uses the test file: performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc

    The test checks the memory scalability of different - "multimap" designs.

    + "multimap" designs.

    Results

    The graphic below show the results for "multimaps" which use a tree-based container for primary keys. @@ -2319,13 +2318,13 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    See Observations::Mapping-Semantics - Considerations.

    + Considerations.

    Text insert with Small Secondary-to-Primary Key Ratios Memory Use -

    +

    Description

    This test inserts a number of pairs into a container. The first item of each pair is a string from an arbitrary text @@ -2340,7 +2339,7 @@ It uses the test file: performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc

    The test checks the memory scalability of different - "multimap" designs.

    + "multimap" designs.

    Results

    The graphic below show the results for "multimaps" which use a tree-based container for primary keys. @@ -2488,12 +2487,12 @@ hash_load_check_resize_trigger with αmin = 1/8 and αmax = 1/2 -

    +
    Observations

    See Observations::Mapping-Semantics - Considerations.

    Priority Queue

    + Considerations.

    Priority Queue

    Text push -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([ wickland96thirty ]) into @@ -2504,7 +2503,7 @@ performance/ext/pb_ds/priority_queue_text_push_timing.cc

    The test checks the effect of different underlying data structures. -

    +

    Results

    The two graphics below show the results for the native priority_queues and this library's priority_queues. @@ -2609,7 +2608,7 @@ Tag pairing_heap_tag -

    +
    Observations

    Pairing heaps (priority_queue with Tag = pairing_heap_tag) @@ -2627,9 +2626,9 @@ operation, and the deque implementation is possibly hampered by its need to manipulate a relatively-complex type (deques support a O(1) push_front, even though it is - not used by std::priority_queue.)

    + not used by std::priority_queue.)

    Text push and pop -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([ wickland96thirty ]) into @@ -2640,7 +2639,7 @@ performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc

    The test checks the effect of different underlying data structures. -

    +

    Results

    The two graphics below show the results for the native priority_queues and this library's priority_queues. @@ -2737,7 +2736,7 @@ Tag pairing_heap_tag -

    +
    Observations

    These results are very similar to Priority Queue Text push Timing Test. As stated there, pairing heaps @@ -2757,9 +2756,9 @@ of push operations, pairing heaps are better in this case. See Priority Queue Random Integer push and pop - Timing Test for a case which is different.

    + Timing Test for a case which is different.

    Integer push -

    +

    Description

    This test inserts a number of values with integer keys into a container using push. It @@ -2769,7 +2768,7 @@ performance/ext/pb_ds/priority_queue_random_int_push_timing.cc

    The test checks the effect of different underlying data structures. -

    +

    Results

    The two graphics below show the results for the native priority_queues and this library's priority_queues. @@ -2866,7 +2865,7 @@ Tag binary_heap_tag -

    +
    Observations

    Binary heaps are the most suited for sequences of push and pop operations of primitive types @@ -2875,9 +2874,9 @@ such types in arrays, they outperform even pairing heaps. (See Priority Queue Text push Timing Test for the case of - non-primitive types.)

    + non-primitive types.)

    Integer push -

    +

    Description

    This test inserts a number of values with integer keys into a container using push , then removes them @@ -2888,7 +2887,7 @@ performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc

    The test checks the effect of different underlying data structures. -

    +

    Results

    The graphic immediately below shows the results for the native priority_queue type instantiated with different underlying @@ -2953,7 +2952,7 @@ Tag pairing_heap_tag -

    +
    Observations

    Binary heaps are the most suited for sequences of push and pop operations of primitive types @@ -2975,9 +2974,9 @@ the number of pop operations is at most that of push operations, the test here is the "best" for the standard's - priority queue.

    + priority queue.

    Text pop Memory Use -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([ wickland96thirty ]) into @@ -2988,7 +2987,7 @@ performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc

    The test checks the effect of different underlying data structures. -

    +

    Results

    The graphic immediately below shows the results for the native priority_queue type instantiated with different underlying @@ -3053,7 +3052,7 @@ Tag pairing_heap_tag -

    +
    Observations

    The priority queue implementations (excluding the standard's) use memory proportionally to the number of values they hold: @@ -3066,9 +3065,9 @@ impede performance compared to the standard's priority queues.

    See Hash-Based Erase Memory Use Test for a similar phenomenon regarding priority - queues.

    + queues.

    Text join -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([ wickland96thirty ]) into @@ -3081,7 +3080,7 @@ performance/ext/pb_ds/priority_queue_text_join_timing.cc

    The test checks the effect of different underlying data structures. -

    +

    Results

    The graphic immediately below shows the results for the native priority_queue type instantiated with different underlying @@ -3146,7 +3145,7 @@ Tag pairing_heap_tag -

    +
    Observations

    In this test the node-based heaps perform join in either logarithmic or constant time. The binary heap requires @@ -3158,9 +3157,9 @@ and size() (since they are enough to expose the underlying array), but this is impossible for a std::deque-based standard priority queue. - Without heapify, the cost is super-linear.

    + Without heapify, the cost is super-linear.

    Text modify Up -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([ wickland96thirty ]) into @@ -3178,7 +3177,7 @@ arbitrary value larger (in the sense of the priority queue's comparison functor) corresponds to decrease-key in standard graph algorithms [clrs2001]. -

    +

    Results

    The two graphics below show the results for the native priority_queues and this library's priority_queues. @@ -3267,7 +3266,7 @@ Tag pairing_heap_tag -

    +
    Observations

    As noted above, increasing an arbitrary value (in the sense of the priority queue's comparison functor) is very common in @@ -3295,9 +3294,9 @@ finding the appropriate value, then use the range-type iterator for the modify operation.

    The explanation for the standard's priority queues' performance is similar to that in Priority Queue Text - join Timing Test.

    + join Timing Test.

    Text modify Down -

    +

    Description

    This test inserts a number of values with keys from an arbitrary text ([ wickland96thirty ]) into @@ -3311,7 +3310,7 @@ It uses the test file: performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc

    The main purpose of this test is to contrast Priority Queue - Text modify Up Timing Test.

    + Text modify Up Timing Test.

    Results

    The two graphics below show the results for the native priority_queues and this library's priority_queues. @@ -3400,7 +3399,7 @@ Tag pairing_heap_tag -

    +
    Observations

    Most points in these results are similar to Priority Queue Text modify Up Timing Test.

    It is interesting to note, however, that as opposed to that @@ -3415,7 +3414,7 @@ (in the sense of the priority queue's comparison functor), and so Priority Queue Text modify Up Timing Test - is more interesting - than this test.

    Observations

    Associative
    + than this test.

    Observations

    Associative
    Underlying Data-Structure Families

    In general, hash-based containers have better timing performance than containers based on different underlying-data structures. The @@ -3424,7 +3423,7 @@ order-preservation, or the ability to utilize node invariants. If memory-use is the major factor, an ordered-vector tree gives optimal results (albeit with high modificiation costs), and a - list-based container gives reasonable results.

    + list-based container gives reasonable results.

    Hash-Based Containers

    Hash-based containers are typically either collision chaining or probing. Collision-chaining @@ -3439,7 +3438,7 @@ useful also in multithreaded applications where each thread manipulates a hash-based container: in the standard, allocators have class-wise semantics (see [meyers96more] - Item 10); a - probing container might incur less contention in this case.

    + probing container might incur less contention in this case.

    Hash Policies

    In hash-based containers, the range-hashing scheme seems to affect performance more than other considerations. In most @@ -3458,7 +3457,7 @@ function.

    An orthogonal consideration is the trigger policy. This presents difficult tradeoffs. E.g., different load factors in a load-check trigger policy yield a - space/amortized-cost tradeoff.

    + space/amortized-cost tradeoff.

    Branch-Based Containers

    In general, there are several families of tree-based underlying data structures: balanced node-based trees @@ -3505,7 +3504,7 @@ maintaining such trees is higher than that of balanced trees. Moderate-fan-out trees might be useful for sequences where each element has a limited number of choices, e.g., DNA - strings.

    + strings.

    Mapping-Semantics

    Different mapping semantics were discussed in the introduction and design sections.Here the focus will be on the case where a keys can be composed into @@ -3585,7 +3584,7 @@ but with very high constants; using 1 with a tree-based container, the cost is Θ(nlog(mn)). Using 2, 3, and 4, the expected cost is Θ(n), but typically - with far lower costs than 1. 5 is similar to 1.

    Priority_Queue
    Complexity

    The following table shows the complexities of the different + with far lower costs than 1. 5 is similar to 1.

    Priority_Queue
    Complexity

    The following table shows the complexities of the different underlying data structures in terms of orders of growth. It is interesting to note that this table implies something about the constants of the operations as well (see Amortized push @@ -3709,7 +3708,7 @@ of the priority queue's comparison functor), then the amortized time is O(1), but if II) it decreases it, then the amortized time is the same as the worst case time. Note that - for most algorithms, I) is important and II) is not.

    + for most algorithms, I) is important and II) is not.

    Amortized push and pop operations

    In many cases, a priority queue is needed primarily for @@ -3739,7 +3738,7 @@ Queue Random Integer push Timing Test and Priority Queue Random Integer push and pop Timing - Test.

    + Test.

    Graph Algorithms

    In some graph algorithms, a decrease-key operation is required [clrs2001]; @@ -3759,4 +3758,4 @@ as well. It is difficult to find an a-priori characterization of graphs in which the actual number of modify operations will dwarf the number of push and - pop operations.

    + pop operations.

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/policy_data_structures.html b/libstdc++-v3/doc/html/manual/policy_data_structures.html index fe17aa6..f98fd4d 100644 --- a/libstdc++-v3/doc/html/manual/policy_data_structures.html +++ b/libstdc++-v3/doc/html/manual/policy_data_structures.html @@ -1,9 +1,8 @@ - -Chapter 22. Policy-Based Data Structures

    Chapter 22. Policy-Based Data Structures

    Intro

    This is a library of policy-based elementary data structures: associative containers and priority queues. It is designed for high-performance, flexibility, semantic safety, and conformance to @@ -73,7 +72,7 @@ std::tr1 (except for some points where it differs by design).

    -

    Performance Issues

    +

    Performance Issues

    An attempt is made to categorize the wide variety of possible container designs in terms of performance-impacting factors. These @@ -93,7 +92,7 @@

    Specific issues found while unraveling performance factors in the design of associative containers and priority queues follow. -

    Associative

    +

    Associative

    Associative containers depend on their composite policies to a very large extent. Implicitly hard-wiring policies can hamper their performance and limit their functionality. An efficient hash-based @@ -134,7 +133,7 @@ is a red-black tree, then splitting a reference to the container is exception-free; if it is an ordered-vector tree, exceptions can be thrown. -

    Priority Que

    +

    Priority Que

    Priority queues are useful when one needs to efficiently access a minimum (or maximum) value as the set of values changes.

    @@ -176,7 +175,7 @@ expense of more difference in the the kinds of operations that the underlying data structure can support. These differences pose a challenge when creating a uniform interface for priority queues. -

    Goals

    +

    Goals

    Many fine associative-container libraries were already written, most notably, the C++ standard's associative containers. Why then write another library? This section shows some possible @@ -187,8 +186,8 @@ only then adding hash-based containers, which are fundamentally different), did not standardize priority queues as containers, and (in our opinion) overloads the iterator concept. -

    Associative

    -

    Policy Choices

    +

    Associative

    +

    Policy Choices

    Associative containers require a relatively large number of policies to function efficiently in various settings. In some cases this is needed for making their common operations more @@ -249,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). -

    Figure 22.1. Node Invariants

    Node Invariants

    Underlying Data Structures

    +

    Figure 22.1. Node Invariants

    Node Invariants

    Underlying Data Structures

    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 @@ -257,7 +256,7 @@

    The figure below shows the different underlying data structures currently supported in this library. -

    Figure 22.2. Underlying Associative Data Structures

    Underlying Associative Data Structures

    +

    Figure 22.2. Underlying Associative Data Structures

    Underlying Associative Data Structures

    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 @@ -334,7 +333,7 @@ library iterators, for example) can ease generic manipulation of associative containers based on different underlying data structures. -

    Iterators

    +

    Iterators

    Iterators are centric to the design of the standard library containers, because of the container/algorithm/iterator decomposition that allows an algorithm to operate on a range @@ -359,7 +358,7 @@ "ds_gen.html#find_range">Design::Associative Containers::Data-Structure Genericity::Point-Type and Range-Type Methods. -

    Using Point Iterators for Range Operations

    +

    Using Point Iterators for Range Operations

    Suppose cntnr is some associative container, and say c is an object of type cntnr. Then what will be the outcome @@ -376,7 +375,7 @@ no guarantee that the elements traversed will coincide with the logical elements between 1 and 5, as in label B. -

    Figure 22.3. Range Iteration in Different Data Structures

    Node Invariants

    +

    Figure 22.3. Range Iteration in Different Data Structures

    Node Invariants

    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 @@ -397,7 +396,7 @@ Consequently, applying an algorithm to a sequence obtained from most containers may or may not make sense, but applying it to a sub-sequence of a self-organizing container does not. -

    Cost to Point Iterators to Enable Range Operations

    +

    Cost to Point Iterators to Enable Range Operations

    Suppose c is some collision-chaining hash-based container object, and one calls

    c.find(3)

    @@ -427,11 +426,11 @@ 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. -

    Figure 22.4. Point Iteration in Hash Data Structures

    Point Iteration in Hash Data Structures

    +

    Figure 22.4. Point Iteration in Hash Data Structures

    Point Iteration in Hash Data Structures

    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. -

    Invalidation Guarantees

    Consider the following snippet:

    +	    

    Invalidation Guarantees

    Consider the following snippet:

     	      it = c.find(3);
     	      c.erase(5);
     	    

    @@ -443,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. -

    Figure 22.5. Effect of erase in different underlying data structures

    Effect of erase in different underlying data structures

    1. +

      Figure 22.5. Effect of erase in different underlying data structures

      Effect of erase in different underlying data structures

      1. 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. @@ -465,7 +464,7 @@ to express whether it is valid or not. This is true also for insert. Again, the iterator concept seems overloaded. -

    Functional

    +

    Functional

    The design of the functional overlay to the underlying data structures differs slightly from some of the conventions used in @@ -476,7 +475,7 @@ rubric, the standard associative containers lack some useful methods, and provide other methods which would be better removed. -

    erase
    1. +

      erase
      1. Order-preserving standard associative containers provide the method

        @@ -548,7 +547,7 @@
         		  is almost certain to do something
         		  different than erasing all elements whose keys are between 2
         		  and 5, and is likely to produce other undefined behavior.
        -		

      +

    split and join

    It is well-known that tree-based and trie-based container @@ -559,7 +558,7 @@ choices for tree-based container methods, especially, since as noted just before, they are efficient replacements for erasing sub-sequences. -

    +

    insert

    The standard associative containers provide methods of the form @@ -575,7 +574,7 @@ similar to constructors taking a range given by a pair of iterators; the constructors, however, are transactional, whereas the insert methods are not; this is possibly confusing. -

    +

    operator== and operator<=

    Associative containers are parametrized by policies allowing to @@ -595,7 +594,7 @@ equivalence; also, are two containers considered equivalent if they store the same values in different order? this is an arbitrary decision. -

    Priority Queues

    Policy Choices

    +

    Priority Queues

    Policy Choices

    Priority queues are containers that allow efficiently inserting values and accessing the maximal value (in the sense of the container's comparison functor). Their interface @@ -672,14 +671,14 @@ comparing the iterator returned by find to the iterator returned by end, and not by comparing a pointer returned by find to NULL. -

    Underlying Data Structures

    +

    Underlying Data Structures

    There are three main implementations of priority queues: the first employs a binary heap, typically one which uses a sequence; the second uses a tree (or forest of trees), which is typically less structured than an associative container's tree; the third simply uses an associative container. These are shown in the figure below with labels A1 and A2, B, and C. -

    Figure 22.6. Underlying Priority Queue Data Structures

    Underlying Priority Queue Data Structures

    +

    Figure 22.6. Underlying Priority Queue Data Structures

    Underlying Priority Queue Data Structures

    No single implementation can completely replace any of the others. Some have better push and pop amortized performance, some have @@ -694,7 +693,7 @@ important for priority queues, since the invalidation guarantees of one of the most useful data structures - binary heaps - is markedly different than those of most of the others. -

    Binary Heaps

    +

    Binary Heaps

    Binary heaps are one of the most useful underlying data structures for priority queues. They are very efficient in terms of memory (since they don't require per-value structure @@ -771,7 +770,7 @@ std::priority_queue, however, this will generally change the order of growth of the entire sequence of operations. -

    Bibliography

    [biblio.abrahams97exception] +

    Bibliography

    [biblio.abrahams97exception] STL Exception Handling Contract @@ -781,7 +780,7 @@ Abrahams . ISO SC22/WG21 - .

    [biblio.alexandrescu01modern] + .

    [biblio.alexandrescu01modern] Modern C++ Design: Generic Programming and Design Patterns Applied . 2001 @@ -791,7 +790,7 @@ Alexandrescu . Addison-Wesley Publishing Company - .

    [biblio.andrew04mtf] + .

    [biblio.andrew04mtf] MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem . @@ -802,7 +801,7 @@ D. Gleich - .

    [biblio.austern00noset] + .

    [biblio.austern00noset] Why You Shouldn't Use set - and What You Should Use Instead . April, 2000 @@ -812,7 +811,7 @@ Austern . C++ Report - .

    [biblio.austern01htprop] + .

    [biblio.austern01htprop] A Proposal to Add Hashtables to the Standard Library @@ -824,7 +823,7 @@ Austern . ISO SC22/WG21 - .

    [biblio.austern98segmentedit] + .

    [biblio.austern98segmentedit] Segmented iterators and hierarchical algorithms . April, 1998 @@ -834,7 +833,7 @@ Austern . Generic Programming - .

    [biblio.dawestimer] + .

    [biblio.dawestimer] Boost Timer Library @@ -844,7 +843,7 @@ Dawes . Boost - .

    [biblio.clearypool] + .

    [biblio.clearypool] Boost Pool Library @@ -854,7 +853,7 @@ Cleary . Boost - .

    [biblio.maddocktraits] + .

    [biblio.maddocktraits] Boost Type Traits Library @@ -868,7 +867,7 @@ Cleary . Boost - .

    [biblio.brodal96priority] + .

    [biblio.brodal96priority] Worst-case efficient priority queues @@ -876,7 +875,7 @@ Gerth Stolting Brodal - .

    [biblio.bulkamayheweff] + .

    [biblio.bulkamayheweff] Efficient C++ Programming Techniques . 1997 @@ -890,7 +889,7 @@ Mayhew . Addison-Wesley Publishing Company - .

    [biblio.clrs2001] + .

    [biblio.clrs2001] Introduction to Algorithms, 2nd edition . 2001 @@ -912,7 +911,7 @@ Stein . MIT Press - .

    [biblio.dubhashi98neg] + .

    [biblio.dubhashi98neg] Balls and bins: A study in negative dependence . 1998 @@ -926,7 +925,7 @@ Ranjan . Random Structures and Algorithms 13 - .

    [biblio.fagin79extendible] + .

    [biblio.fagin79extendible] Extendible hashing - a fast access method for dynamic files . 1979 @@ -948,7 +947,7 @@ Strong . ACM Trans. Database Syst. 4 - .

    [biblio.filliatre2000ptset] + .

    [biblio.filliatre2000ptset] Ptset: Sets of integers implemented as Patricia trees @@ -958,7 +957,7 @@ Jean-Christophe Filliatre - .

    [biblio.fredman86pairing] + .

    [biblio.fredman86pairing] The pairing heap: a new form of self-adjusting heap @@ -980,7 +979,7 @@ R. E. Tarjan - .

    [biblio.gof] + .

    [biblio.gof] Design Patterns - Elements of Reusable Object-Oriented Software . 1995 @@ -1002,7 +1001,7 @@ Vlissides . Addison-Wesley Publishing Company - .

    [biblio.garg86order] + .

    [biblio.garg86order] Order-preserving key transformations . 1986 @@ -1016,7 +1015,7 @@ Gotlieb . Trans. Database Syst. 11 - .

    [biblio.hyslop02making] + .

    [biblio.hyslop02making] Making a real hash of things . May 2002 @@ -1030,7 +1029,7 @@ Sutter . C++ Report - .

    [biblio.jossutis01stl] + .

    [biblio.jossutis01stl] The C++ Standard Library - A Tutorial and Reference . 2001 @@ -1040,7 +1039,7 @@ Jossutis . Addison-Wesley Publishing Company - .

    [biblio.kt99fat_heaps] + .

    [biblio.kt99fat_heaps] New Heap Data Structures @@ -1054,7 +1053,7 @@ Robert E. Tarjan - .

    [biblio.kleft00sets] + .

    [biblio.kleft00sets] Are Set Iterators Mutable or Immutable? . October 2000 @@ -1068,7 +1067,7 @@ Kleft . C/C++ Users Jornal - .

    [biblio.knuth98sorting] + .

    [biblio.knuth98sorting] The Art of Computer Programming - Sorting and Searching . 1998 @@ -1078,7 +1077,7 @@ Knuth . Addison-Wesley Publishing Company - .

    [biblio.liskov98data] + .

    [biblio.liskov98data] Data abstraction and hierarchy . May 1998 @@ -1088,7 +1087,7 @@ Liskov . SIGPLAN Notices 23 - .

    [biblio.litwin80lh] + .

    [biblio.litwin80lh] Linear hashing: A new tool for file and table addressing . June 1980 @@ -1098,7 +1097,7 @@ Litwin . Proceedings of International Conference on Very Large Data Bases - .

    [biblio.maverik_lowerbounds] + .

    [biblio.maverik_lowerbounds] Deamortization - Part 2: Binomial Heaps @@ -1108,7 +1107,7 @@ Maverik Woo - .

    [biblio.meyers96more] + .

    [biblio.meyers96more] More Effective C++: 35 New Ways to Improve Your Programs and Designs . 1996 @@ -1118,7 +1117,7 @@ Meyers . Addison-Wesley Publishing Company - .

    [biblio.meyers00nonmember] + .

    [biblio.meyers00nonmember] How Non-Member Functions Improve Encapsulation . 2000 @@ -1128,7 +1127,7 @@ Meyers . C/C++ Users Journal - .

    [biblio.meyers01stl] + .

    [biblio.meyers01stl] Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library . 2001 @@ -1138,7 +1137,7 @@ Meyers . Addison-Wesley Publishing Company - .

    [biblio.meyers02both] + .

    [biblio.meyers02both] Class Template, Member Template - or Both? . 2003 @@ -1148,7 +1147,7 @@ Meyers . C/C++ Users Journal - .

    [biblio.motwani95random] + .

    [biblio.motwani95random] Randomized Algorithms . 2003 @@ -1162,13 +1161,13 @@ Raghavan . Cambridge University Press - .

    [biblio.mscom] + .

    [biblio.mscom] COM: Component Model Object Technologies . Microsoft - .

    [biblio.musser95rationale] + .

    [biblio.musser95rationale] Rationale for Adding Hash Tables to the C++ Standard Template Library . 1995 @@ -1176,7 +1175,7 @@ David R. Musser - .

    [biblio.musser96stltutorial] + .

    [biblio.musser96stltutorial] STL Tutorial and Reference Guide . 1996 @@ -1190,7 +1189,7 @@ Saini . Addison-Wesley Publishing Company - .

    [biblio.nelson96stlpq] + .

    [biblio.nelson96stlpq] Priority Queues and the STL . @@ -1201,7 +1200,7 @@ Nelson . Dr. Dobbs Journal - .

    [biblio.okasaki98mereable] + .

    [biblio.okasaki98mereable] Fast mergeable integer maps . September 1998 @@ -1215,7 +1214,7 @@ Gill . In Workshop on ML - .

    [biblio.sgi_stl] + .

    [biblio.sgi_stl] Standard Template Library Programmer's Guide @@ -1225,11 +1224,11 @@ Austern . SGI - .

    [biblio.select_man] + .

    [biblio.select_man] select - .

    [biblio.sleator84amortized] + .

    [biblio.sleator84amortized] Amortized Efficiency of List Update Problems . 1984 @@ -1243,7 +1242,7 @@ Tarjan . ACM Symposium on Theory of Computing - .

    [biblio.sleator85self] + .

    [biblio.sleator85self] Self-Adjusting Binary Search Trees . 1985 @@ -1257,7 +1256,7 @@ Tarjan . ACM Symposium on Theory of Computing - .

    [biblio.stepanov94standard] + .

    [biblio.stepanov94standard] The Standard Template Library . 1984 @@ -1269,7 +1268,7 @@ M. Lee - .

    [biblio.stroustrup97cpp] + .

    [biblio.stroustrup97cpp] The C++ Programming Langugage . 1997 @@ -1279,7 +1278,7 @@ Stroustrup . Addison-Wesley Publishing Company - .

    [biblio.vandevoorde2002cpptemplates] + .

    [biblio.vandevoorde2002cpptemplates] C++ Templates: The Complete Guide . 2002 @@ -1293,7 +1292,7 @@ Josuttis . Addison-Wesley Publishing Company - .

    [biblio.wickland96thirty] + .

    [biblio.wickland96thirty] Thirty Years Among the Dead @@ -1305,4 +1304,4 @@ Wickland . National Psychological Institute - .

    + .

    \ No newline at end of file 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 b2cea71..c4ddfc2 100644 --- a/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html +++ b/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html @@ -1,6 +1,5 @@ - -Acknowledgments

    Acknowledgments

    +Acknowledgments

    Acknowledgments

    Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research Laboratories), and Benjamin Kosnik (Red Hat).

    @@ -26,4 +25,4 @@ attributing to him any flaws in the design or implementation of the library).

    We would like to thank Matt Austern for the suggestion to - include tries.

    + include tries.

    \ 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 e9329c9..1aa97fa 100644 --- a/libstdc++-v3/doc/html/manual/policy_data_structures_design.html +++ b/libstdc++-v3/doc/html/manual/policy_data_structures_design.html @@ -1,6 +1,5 @@ - -Design

    Design

    Concepts

    Null Policy Classes

    +Design

    Design

    Concepts

    Null Policy Classes

    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 @@ -27,7 +26,7 @@ places simplifications are made possible with this technique include node updates in tree and trie data structures, and hash and probe functions for hash data structures. -

    Map and Set Semantics

    +

    Map and Set Semantics

    Distinguishing Between Maps and Sets

    Anyone familiar with the standard knows that there are four kinds @@ -93,7 +92,7 @@

    When one uses a "multimap," one should choose with care the type of container used for secondary keys. -

    Alternatives to std::multiset and std::multimap

    +

    Alternatives to std::multiset and std::multimap

    Brace onself: this library does not contain containers like std::multimap or std::multiset. Instead, these data @@ -171,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. -

    Figure 22.8. Non-unique Mapping Standard Containers

    Non-unique Mapping Standard Containers

    +

    Figure 22.8. Non-unique Mapping Standard Containers

    Non-unique Mapping Standard Containers

    Put differently, the standards' non-unique mapping associative-containers are associative containers that map primary keys to linked lists that are embedded into the @@ -253,7 +252,7 @@ first graphic above. Labels A and B, respectively. Each shaded box represents some size-type or secondary associative-container. -

    Figure 22.10. Non-unique Mapping Containers

    Non-unique Mapping Containers

    +

    Figure 22.10. Non-unique Mapping Containers

    Non-unique Mapping Containers

    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 @@ -265,7 +264,7 @@

    See the discussion in list-based container types for containers especially suited as secondary associative-containers. -

    Iterator Semantics

    Point and Range Iterators

    +

    Iterator Semantics

    Point and Range Iterators

    Iterator concepts are bifurcated in this design, and are comprised of point-type and range-type iteration.

    @@ -286,7 +285,7 @@ implementation, including that of C++ standard library components), but in this design, it is made explicit. They are distinct types. -

    Distinguishing Point and Range Iterators

    When using this library, is necessary to differentiate +

    Distinguishing Point and Range Iterators

    When using this library, is necessary to differentiate between two types of methods and iterators: point-type methods and iterators, and range-type methods and iterators. Each associative container's interface includes the methods:

    @@ -306,7 +305,7 @@
     	shows invariants for order-preserving containers: point-type
     	iterators are synonymous with range-type iterators.
     	Orthogonally,  Cshows invariants for "set"
    -	containers: iterators are synonymous with const iterators.

    Figure 22.11. Point Iterator Hierarchy

    Point Iterator Hierarchy

    Note that point-type iterators in self-organizing containers + containers: iterators are synonymous with const iterators.

    Figure 22.11. Point Iterator Hierarchy

    Point Iterator Hierarchy

    Note that point-type iterators in self-organizing containers (hash-based associative containers) lack movement operators, such as operator++ - in fact, this is the reason why this library differentiates from the standard C++ librarys @@ -322,7 +321,7 @@ a concept in C++ standardese, which is the category of iterators with no movement capabilities.) All other standard C++ library tags, such as forward_iterator_tag retain their - common use.

    Invalidation Guarantees

    + common use.

    Invalidation Guarantees

    If one manipulates a container object, then iterators previously obtained from it can be invalidated. In some cases a previously-obtained iterator cannot be de-referenced; in other cases, @@ -345,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. -

    Figure 22.12. Invalidation Guarantee Tags Hierarchy

    Invalidation Guarantee Tags Hierarchy

    • +

      Figure 22.12. Invalidation Guarantee Tags Hierarchy

      Invalidation Guarantee Tags Hierarchy

      • basic_invalidation_guarantee corresponds to a basic guarantee that a point-type iterator, a found pointer, or a found reference, remains valid as long @@ -376,7 +375,7 @@ our opinion, an invalidation-guarantee hierarchy would solve these problems in all container types - not just associative containers. -

    Genericity

    +

    Genericity

    The design attempts to address the following problem of data-structure genericity. When writing a function manipulating a generic container object, what is the behavior of the object? @@ -391,7 +390,7 @@

    then one needs to address the following questions in the body of some_op_sequence: -

    • +

      • Which types and methods does Cntnr support? Containers based on hash tables can be queries for the hash-functor type and object; this is meaningless for tree-based @@ -418,7 +417,7 @@ capabilities? What is the relationship between two different data structures, if anything?

      The remainder of this section explains these issues in - detail.

      Tag

      + detail.

      Tag

      Tags are very useful for manipulating generic types. For example, if It is an iterator class, then typename It::iterator_category or typename @@ -429,11 +428,11 @@

      This library contains a container tag hierarchy corresponding to the diagram below. -

      Figure 22.13. Container Tag Hierarchy

      Container Tag Hierarchy

      +

      Figure 22.13. Container Tag Hierarchy

      Container Tag Hierarchy

      Given any container Cntnr, the tag of the underlying data structure can be found via typename Cntnr::container_category. -

      Traits

      Additionally, a traits mechanism can be used to query a +

      Traits

      Additionally, a traits mechanism can be used to query a container type for its attributes. Given any container Cntnr, then <Cntnr> is a traits class identifying the properties of the @@ -453,7 +452,7 @@ otherwise container_traits<Cntnr>::split_join_can_throw will yield a compilation error. (This is somewhat similar to a compile-time version of the COM model). -

    By Container

    hash

    Interface

    +

    By Container

    hash

    Interface

    The collision-chaining hash-based container has the following declaration.

     	  template<
    @@ -487,8 +486,8 @@
     	

    The parameters are identical to those of the collision-chaining container, except for the following.

    1. Comb_Probe_Fn describes how to transform a probe sequence into a sequence of positions within the table.

    2. Probe_Fn describes a probe sequence policy.

    Some of the default template values depend on the values of - other parameters, and are explained below.

    Details
    Hash Policies
    General

    Following is an explanation of some functions which hashing - involves. The graphic below illustrates the discussion.

    Figure 22.14. Hash functions, ranged-hash functions, and + other parameters, and are explained below.

    Details
    Hash Policies
    General

    Following is an explanation of some functions which hashing + involves. The graphic below illustrates the discussion.

    Figure 22.14. Hash functions, ranged-hash functions, and range-hashing functions

    Hash functions, ranged-hash functions, and range-hashing functions

    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 - @@ -505,7 +504,7 @@ Z+,

    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+,

    0 ≤ g(r, m) ≤ m - 1

    The resulting ranged-hash function, is

    Equation 22.1. Ranged Hash Function

    + i.e., for any r in Z+,

    0 ≤ g(r, m) ≤ m - 1

    The resulting ranged-hash function, is

    Equation 22.1. Ranged Hash Function

    f(u , m) = g(h(u), m)

    From the above, it is obvious that given g and h, f can always be composed (however the converse @@ -523,9 +522,9 @@ probe function transforming the hash value into a sequence of hash values, and a range-hashing function transforming the sequence of hash values into a sequence of - positions.

    Range Hashing

    Some common choices for range-hashing functions are the + positions.

    Range Hashing

    Some common choices for range-hashing functions are the division, multiplication, and middle-square methods ([biblio.knuth98sorting]), defined - as

    Equation 22.2. Range-Hashing, Division Method

    + as

    Equation 22.2. Range-Hashing, Division Method

    g(r, m) = r mod m

    g(r, m) = ⌈ u/v ( a r mod v ) ⌉

    and

    g(r, m) = ⌈ u/v ( r2 mod v ) ⌉

    respectively, for some positive integrals u and v (typically powers of 2), and some a. Each of @@ -536,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.,

    Equation 22.3. Division via Prime Modulo

    + m is a power of 2), i.e.,

    Equation 22.3. Division via Prime Modulo

    g(r, m) = r % m -

    and

    Equation 22.4. Division via Bit Mask

    +

    and

    Equation 22.4. Division via Bit Mask

    g(r, m) = r & m - 1, (with m = 2k for some k)

    respectively.

    The % (modulo) implementation has the advantage that for @@ -550,7 +549,7 @@ relying on the fast bit-wise and operation. It has the disadvantage that for g(r, m) is affected only by the low order bits of r. This method is hard-wired into - Dinkumware's implementation.

    Ranged Hash

    In cases it is beneficial to allow the + Dinkumware's implementation.

    Ranged Hash

    In cases it is beneficial to allow the client to directly specify a ranged-hash hash function. It is true, that the writer of the ranged-hash function cannot rely on the values of m having specific numerical properties @@ -564,7 +563,7 @@ s = [ s0,..., st - 1]

    be a string of t characters, each of which is from domain S. Consider the following ranged-hash - function:

    Equation 22.5.  + function:

    Equation 22.5.  A Standard String Hash Function

    f1(s, m) = ∑ i = @@ -576,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

    |S|k ≥ m ,

    i.e., using the hash function

    Equation 22.6.  + only the first k characters of the string, where

    |S|k ≥ m ,

    i.e., using the hash function

    Equation 22.6.  Only k String DNA Hash

    f2(s, m) = ∑ i @@ -590,12 +589,12 @@ 1 sri ari mod m ,

    respectively, for r0,..., rk-1 each in the (inclusive) range [0,...,t-1].

    It should be noted that the above functions cannot be - decomposed as per a ranged hash composed of hash and range hashing.

    Implementation

    This sub-subsection describes the implementation of + decomposed as per a ranged hash composed of hash and range hashing.

    Implementation

    This sub-subsection describes the implementation of the above in this library. It first explains range-hashing functions in collision-chaining tables, then ranged-hash functions in collision-chaining tables, then probing-based tables, and finally lists the relevant classes in this - library.

    + library.

    Range-Hashing and Ranged-Hashes in Collision-Chaining Tables

    cc_hash_table is parametrized by Hash_Fn and Comb_Hash_Fn, a @@ -607,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).

    Figure 22.15. Insert hash sequence diagram

    Insert hash sequence diagram

    If cc_hash_table's + and E).

    Figure 22.15. Insert hash sequence diagram

    Insert hash sequence diagram

    If cc_hash_table's hash-functor, Hash_Fn is instantiated by null_type , then Comb_Hash_Fn is taken to be a ranged-hash function. The graphic below shows an insert 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).

    Figure 22.16. Insert hash sequence diagram with a null policy

    Insert hash sequence diagram with a null policy

    + (points B and C).

    Figure 22.16. Insert hash sequence diagram with a null policy

    Insert hash sequence diagram with a null policy

    Probing tables

    gp_hash_table is parametrized by Hash_Fn, Probe_Fn, @@ -624,7 +623,7 @@ functor, Probe_Fn is a functor for offsets from a hash value, and Comb_Probe_Fn transforms a probe sequence into a sequence of positions within - the table.

    + the table.

    Pre-Defined Policies

    This library contains some pre-defined classes implementing range-hashing and probing functions:

    1. direct_mask_range_hashing @@ -635,14 +634,14 @@ a linear probe and a quadratic probe function, respectively.

    The graphic below shows the relationships. -

    Figure 22.17. Hash policy class diagram

    Hash policy class diagram

    Resize Policies
    General

    Hash-tables, as opposed to trees, do not naturally grow or +

    Figure 22.17. Hash policy class diagram

    Hash policy class diagram

    Resize Policies
    General

    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:

    1. A size policy indicating how a hash table should grow (e.g., it should multiply by powers of 2).

    2. A trigger policy indicating when a hash table should grow (e.g., a load factor is - exceeded).

    Size Policies

    Size policies determine how a hash table changes size. These + exceeded).

    Size Policies

    Size policies determine how a hash table changes size. These policies are simple, and there are relatively few sensible options. An exponential-size policy (with the initial size and growth factors both powers of 2) works well with a mask-based @@ -650,7 +649,7 @@ hard-wired policy used by Dinkumware. A prime-list based policy works well with a modulo-prime range hashing function and is the hard-wired policy used by SGI's - implementation.

    Trigger Policies

    Trigger policies determine when a hash table changes size. + implementation.

    Trigger Policies

    Trigger policies determine when a hash table changes size. Following is a description of two policies: load-check policies, and collision-check policies.

    Load-check policies are straightforward. The user specifies two factors, Αmin and @@ -668,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.

    Figure 22.18. Balls and bins

    Balls and bins

    Denote the probability that a probe sequence of length + be found with probability at most 1/m.

    Figure 22.18. Balls and bins

    Balls and bins

    Denote the probability that a probe sequence of length k appears in bin i by pi, the length of the probe sequence of bin i by - li, and assume uniform distribution. Then

    Equation 22.7.  + li, and assume uniform distribution. Then

    Equation 22.7.  Probability of Probe Sequence of Length k

    p1 = @@ -685,7 +684,7 @@ li are negatively-dependent ([biblio.dubhashi98neg]) . Let - I(.) denote the indicator function. Then

    Equation 22.8.  + I(.) denote the indicator function. Then

    Equation 22.8.  Probability Probe Sequence in Some Bin

    P( existsi li ≥ k ) = @@ -697,11 +696,11 @@ be applied to negatively-dependent variables ([biblio.dubhashi98neg]). Inserting the first probability equation into the second one, and equating with 1/m, we obtain

    k ~ √ ( 2 α ln 2 m ln(m) ) - ) .

    Implementation

    This sub-subsection describes the implementation of the + ) .

    Implementation

    This sub-subsection describes the implementation of the above in this library. It first describes resize policies and their decomposition into trigger and size policies, then describes pre-defined classes, and finally discusses controlled - access the policies' internals.

    Decomposition

    Each hash-based container is parametrized by a + access the policies' internals.

    Decomposition

    Each hash-based container is parametrized by a Resize_Policy parameter; the container derives publicly from Resize_Policy. For example:

    @@ -724,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).

    Figure 22.19. Insert resize sequence diagram

    Insert resize sequence diagram

    In practice, a resize policy can be usually orthogonally + inserted, and the policy notified (point I).

    Figure 22.19. Insert resize sequence diagram

    Insert resize sequence diagram

    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: hash_standard_resize_policy @@ -733,9 +732,9 @@ both, and acts as a standard delegate ([biblio.gof]) to these policies.

    The two graphics immediately below show sequence diagrams illustrating the interaction between the standard resize policy - and its trigger and size policies, respectively.

    Figure 22.20. Standard resize policy trigger sequence - diagram

    Standard resize policy trigger sequence diagram

    Figure 22.21. Standard resize policy size sequence - diagram

    Standard resize policy size sequence diagram

    Predefined Policies

    The library includes the following + and its trigger and size policies, respectively.

    Figure 22.20. Standard resize policy trigger sequence + diagram

    Standard resize policy trigger sequence diagram

    Figure 22.21. Standard resize policy size sequence + diagram

    Standard resize policy size sequence diagram

    Predefined Policies

    The library includes the following instantiations of size and trigger policies:

    1. hash_load_check_resize_trigger implements a load check trigger policy.

    2. cc_hash_max_collision_check_resize_trigger implements a collision check trigger policy.

    3. hash_exponential_size_policy @@ -753,7 +752,7 @@ instantiated by hash_load_check_resize_trigger, or cc_hash_max_collision_check_resize_trigger; Size_Policy is instantiated by hash_exponential_size_policy, - or hash_prime_size_policy.

    Controling Access to Internals

    There are cases where (controlled) access to resize + or hash_prime_size_policy.

    Controling Access to Internals

    There are cases where (controlled) access to resize policies' internals is beneficial. E.g., it is sometimes useful to query a hash-table for the table's actual size (as opposed to its size() - the number of values it @@ -798,11 +797,11 @@

    which resizes the container. Implementations of Resize_Policy can export public methods for resizing the container externally; these methods internally call - do_resize to resize the table.

    Policy Interactions

    + do_resize to resize the table.

    Policy Interactions

    Hash-tables are unfortunately especially susceptible to choice of policies. One of the more complicated aspects of this is that poor combinations of good policies can form a poor - container. Following are some considerations.

    probe/size/trigger

    Some combinations do not work well for probing containers. + container. Following are some considerations.

    probe/size/trigger

    Some combinations do not work well for probing containers. For example, combining a quadratic probe policy with an exponential size policy can yield a poor container: when an element is inserted, a trigger policy might decide that there @@ -811,13 +810,13 @@ the unused entries.

    Unfortunately, this library cannot detect such problems at compilation (they are halting reducible). It therefore defines an exception class insert_error to throw an - exception in this case.

    hash/trigger

    Some trigger policies are especially susceptible to poor + exception in this case.

    hash/trigger

    Some trigger policies are especially susceptible to poor hash functions. Suppose, as an extreme case, that the hash function transforms each key to the same hash value. After some inserts, a collision detecting policy will always indicate that the container needs to grow.

    The library, therefore, by design, limits each operation to one resize. For each insert, for example, it queries - only once whether a resize is needed.

    equivalence functors/storing hash values/hash

    cc_hash_table and + only once whether a resize is needed.

    equivalence functors/storing hash values/hash

    cc_hash_table and gp_hash_table are parametrized by an equivalence functor and by a Store_Hash parameter. If the latter parameter is @@ -828,7 +827,7 @@ collisions for other types.

    If a ranged-hash function or ranged probe function is directly supplied, however, then it makes no sense to store the hash value with each entry. This library's container will - fail at compilation, by design, if this is attempted.

    size/load-check trigger

    Assume a size policy issues an increasing sequence of sizes + fail at compilation, by design, if this is attempted.

    size/load-check trigger

    Assume a size policy issues an increasing sequence of sizes a, a q, a q1, a q2, ... For example, an exponential size policy might issue the sequence of sizes 8, 16, 32, 64, ...

    If a load-check trigger policy is used, with loads @@ -836,7 +835,7 @@ respectively, then it is a good idea to have:

    1. αmax ~ 1 / q

    2. αmin < 1 / (2 q)

    This will ensure that the amortized hash cost of each modifying operation is at most approximately 3.

    αmin ~ αmax is, in any case, a bad choice, and αmin > - α max is horrendous.

    tree

    Interface

    The tree-based container has the following declaration:

    +	    α max is horrendous.

    tree

    Interface

    The tree-based container has the following declaration:

     	  template<
     	  typename Key,
     	  typename Mapped,
    @@ -861,7 +860,7 @@
     	Note that containers based on the former two contain more types
     	and methods than the latter (e.g.,
     	reverse_iterator and rbegin), and different
    -	exception and invalidation guarantees.

    Details
    Node Invariants

    Consider the two trees in the graphic below, labels A and B. The first + exception and invalidation guarantees.

    Details
    Node Invariants

    Consider the two trees in the graphic below, labels A and B. The first is a tree of floats; the second is a tree of pairs, each signifying a geometric line interval. Each element in a tree is refered to as a node of the tree. Of course, each of these trees can support the usual queries: the first can easily @@ -877,7 +876,7 @@ each node, and maintains node invariants (see [biblio.clrs2001].) The first stores in each node the size of the sub-tree rooted at the node; the second stores at each node the maximal endpoint of the - intervals at the sub-tree rooted at the node.

    Figure 22.22. Tree node invariants

    Tree node invariants

    Supporting such trees is difficult for a number of + intervals at the sub-tree rooted at the node.

    Figure 22.22. Tree node invariants

    Tree node invariants

    Supporting such trees is difficult for a number of reasons:

    1. There must be a way to specify what a node's metadata should be (if any).

    2. Various operations can invalidate node invariants. The graphic below shows how a right rotation, @@ -891,9 +890,9 @@ metadata.

    3. It is not feasible to know in advance which methods trees can support. Besides the usual find method, the first tree can support a find_by_order method, while - the second can support an overlaps method.

    Figure 22.23. Tree node invalidation

    Tree node invalidation

    These problems are solved by a combination of two means: + the second can support an overlaps method.

    Figure 22.23. Tree node invalidation

    Tree node invalidation

    These problems are solved by a combination of two means: node iterators, and template-template node updater - parameters.

    Node Iterators

    Each tree-based container defines two additional iterator + parameters.

    Node Iterators

    Each tree-based container defines two additional iterator types, const_node_iterator and node_iterator. These iterators allow descending from a node to one of its @@ -913,14 +912,14 @@ node_end();

    The first pairs return node iterators corresponding to the root node of the tree; the latter pair returns node iterators - corresponding to a just-after-leaf node.

    Node Updator

    The tree-based containers are parametrized by a + corresponding to a just-after-leaf node.

    Node Updator

    The tree-based containers are parametrized by a Node_Update template-template parameter. A tree-based container instantiates Node_Update to some node_update class, and publicly subclasses node_update. The graphic below shows this scheme, as well as some predefined policies (which are explained - below).

    Figure 22.24. A tree and its update policy

    A tree and its update policy

    node_update (an instantiation of + below).

    Figure 22.24. A tree and its update policy

    A tree and its update policy

    node_update (an instantiation of Node_Update) must define metadata_type as the type of metadata it requires. For order statistics, e.g., metadata_type might be size_t. @@ -939,7 +938,7 @@ nd_it. 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.

    Figure 22.25. Restoring node invariants

    Restoring node invariants

    When a tree operation might invalidate some node invariant, + nodes should have valid invariants, as in label B.

    Figure 22.25. Restoring node invariants

    Restoring node invariants

    When a tree operation might invalidate some node invariant, it invokes this method in its node_update base to restore the invariant. For example, the graphic below shows an insert operation (point A); the tree performs some @@ -947,7 +946,7 @@ C, and D). (It is well known that any insert, erase, split or join, can restore all node invariants by a small number of node invariant updates ([biblio.clrs2001]) - .

    Figure 22.26. Insert update sequence

    Insert update sequence

    To complete the description of the scheme, three questions + .

    Figure 22.26. Insert update sequence

    Insert update sequence

    To complete the description of the scheme, three questions need to be answered:

    1. How can a tree which supports order statistics define a method such as find_by_order?

    2. How can the node updater base access methods of the tree?

    3. How can the following cyclic dependency be resolved? @@ -989,9 +988,9 @@ 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.

    Figure 22.27. Useless update path

    Useless update path

    A null policy class, null_node_update + redundant updates all the way.

    Figure 22.27. Useless update path

    Useless update path

    A null policy class, null_node_update solves both these problems. The tree detects that node - invariants are irrelevant, and defines all accordingly.

    Split and Join

    Tree-based containers support split and join methods. + invariants are irrelevant, and defines all accordingly.

    Split and Join

    Tree-based containers support split and join methods. It is possible to split a tree so that it passes all nodes with keys larger than a given key to a different tree. These methods have the following advantages over the @@ -1001,7 +1000,7 @@ trees are split and joined at linear complexity. The alternatives have super-linear complexity.

  • Aside from orders of growth, these operations perform few allocations and de-allocations. For red-black trees, allocations are not performed, - and the methods are exception-free.

  • Trie

    Interface

    The trie-based container has the following declaration:

    +	    and the methods are exception-free. 

    Trie

    Interface

    The trie-based container has the following declaration:

     	  template<typename Key,
     	  typename Mapped,
     	  typename Cmp_Fn = std::less<Key>,
    @@ -1035,7 +1034,7 @@
     	  complexity and size).

  • It works well for common-prefix keys.

  • It can support efficiently queries such as which keys match a certain prefix. This is sometimes useful in file systems and routers, and for "type-ahead" aka predictive text matching - on mobile devices.

  • Details
    Element Access Traits

    A trie inherently views its keys as sequences of elements. + on mobile devices.

    Details
    Element Access Traits

    A trie inherently views its keys as sequences of elements. For example, a trie can view a string as a sequence of characters. A trie needs to map each of n elements to a number in {0, n - 1}. For example, a trie can map a @@ -1072,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 'a', and the other to - 's'.

    Figure 22.28. A PATRICIA trie

    A PATRICIA trie

    Node Invariants

    Trie-based containers support node invariants, as do + 's'.

    Figure 22.28. A PATRICIA trie

    A PATRICIA trie

    Node Invariants

    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:

    1. A trie's Node_Update template-template @@ -1081,15 +1080,15 @@ parametrized by Cmp_Fn.

    2. Tree-based containers store values in all nodes, while trie-based containers (at least in this implementation) store values in leafs.

    The graphic below shows the scheme, as well as some predefined - policies (which are explained below).

    Figure 22.29. A trie and its update policy

    A trie and its update policy

    This library offers the following pre-defined trie node + policies (which are explained below).

    Figure 22.29. A trie and its update policy

    A trie and its update policy

    This library offers the following pre-defined trie node updating policies:

    1. trie_order_statistics_node_update supports order statistics.

    2. trie_prefix_search_node_update supports searching for ranges that match a given prefix.

    3. null_node_update - is the null node updater.

    Split and Join

    Trie-based containers support split and join methods; the + is the null node updater.

    Split and Join

    Trie-based containers support split and join methods; the rationale is equal to that of tree-based containers supporting - these methods.

    List

    Interface

    The list-based container has the following declaration:

    +	  these methods.

    List

    Interface

    The list-based container has the following declaration:

     	  template<typename Key,
     	  typename Mapped,
     	  typename Eq_Fn = std::equal_to<Key>,
    @@ -1124,12 +1123,12 @@
     	useful manner? Remarkably, many on-line competitive
     	algorithms exist for reordering lists to reflect access
     	prediction. (See [biblio.motwani95random] and [biblio.andrew04mtf]).
    -	

    Details

    -

    Underlying Data Structure

    The graphic below shows a +

    Details

    +

    Underlying Data Structure

    The graphic below shows a simple list of integer keys. If we search for the integer 6, we are paying an overhead: the link with key 6 is only the fifth link; if it were the first link, it could be accessed - faster.

    Figure 22.30. A simple list

    A simple list

    List-update algorithms reorder lists as elements are + faster.

    Figure 22.30. A simple list

    A simple list

    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.

    For example, in the graphic below label A shows the counter @@ -1139,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. -

    Figure 22.31. The counter algorithm

    The counter algorithm

    Policies

    this library allows instantiating lists with policies +

    Figure 22.31. The counter algorithm

    The counter algorithm

    Policies

    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).

    Associative containers based on lists are parametrized by a @@ -1174,7 +1173,7 @@ the list. The latter type is very useful in this library, since there is no need to associate metadata with each element. (See [biblio.andrew04mtf] -

    Use in Multimaps

    In this library, there are no equivalents for the standard's +

    Use in Multimaps

    In this library, there are no equivalents for the standard's multimaps and multisets; instead one uses an associative container mapping primary keys to secondary keys.

    List-based containers are especially useful as associative containers for secondary keys. In fact, they are implemented @@ -1203,7 +1202,7 @@ object (a hash-based container object holds a hash functor). List-based containers, conversely, only have class-wide policy objects. -

    Priority Queue

    Interface

    The priority queue container has the following +

    Priority Queue

    Interface

    The priority queue container has the following declaration:

     	  template<typename  Value_Type,
    @@ -1239,7 +1238,7 @@
     	insufficient for manipulating priority-queues. 

    Different settings require different priority-queue implementations which are described in later; see traits discusses ways to differentiate between the different traits of - different implementations.

    Details
    Iterators

    There are many different underlying-data structures for + different implementations.

    Details
    Iterators

    There are many different underlying-data structures for implementing priority queues. Unfortunately, most such structures are oriented towards making push and top efficient, and consequently don't allow efficient @@ -1306,12 +1305,12 @@ this data and a priority queue's iterator. Using the embedded method would need to use two associative containers. Similar problems might arise in cases where a value can reside - simultaneously in many priority queues.

    Underlying Data Structure

    There are three main implementations of priority queues: the + simultaneously in many priority queues.

    Underlying Data Structure

    There are three main implementations of priority queues: the first employs a binary heap, typically one which uses a sequence; the second uses a tree (or forest of trees), which is typically less structured than an associative container's tree; the third simply uses an associative container. These are - shown in the graphic below, in labels A1 and A2, label B, and label C.

    Figure 22.32. Underlying Priority-Queue Data-Structures.

    Underlying Priority-Queue Data-Structures.

    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.

    Figure 22.32. Underlying Priority-Queue Data-Structures.

    Underlying Priority-Queue Data-Structures.

    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 @@ -1381,7 +1380,7 @@ at all; the priority queue itself is an associative container. Most associative containers are too structured to compete with priority queues in terms of push and pop - performance.

    Traits

    It would be nice if all priority queues could + performance.

    Traits

    It would be nice if all priority queues could share exactly the same behavior regardless of implementation. Sadly, this is not possible. Just one for instance is in join operations: joining two binary heaps might throw an exception (not corrupt any of the heaps on which it operates), but joining two pairing @@ -1391,7 +1390,7 @@ container Cntnr, the tag of the underlying data structure can be found via typename Cntnr::container_category; this is one of the possible tags shown in the graphic below. -

    Figure 22.33. Priority-Queue Data-Structure Tags.

    Priority-Queue Data-Structure Tags.

    Additionally, a traits mechanism can be used to query a +

    Figure 22.33. Priority-Queue Data-Structure Tags.

    Priority-Queue Data-Structure Tags.

    Additionally, a traits mechanism can be used to query a container type for its attributes. Given any container Cntnr, then

    __gnu_pbds::container_traits<Cntnr>

    is a traits class identifying the properties of the @@ -1427,4 +1426,4 @@ erase operations is non-negligible (say super-logarithmic in the total sequence of operations) - binary heaps will perform badly. -

    +

    \ No newline at end of file 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 becda67..0cbc196 100644 --- a/libstdc++-v3/doc/html/manual/policy_data_structures_using.html +++ b/libstdc++-v3/doc/html/manual/policy_data_structures_using.html @@ -1,6 +1,5 @@ - -Using

    Using

    Prerequisites

    The library contains only header files, and does not require any +Using

    Using

    Prerequisites

    The library contains only header files, and does not require any other libraries except the standard C++ library . All classes are defined in namespace __gnu_pbds. The library internally uses macros beginning with PB_DS, but @@ -11,11 +10,11 @@ Further dependencies are necessary to create the visual output for the performance tests. To create these graphs, an additional package is needed: pychart. -

    Organization

    +

    Organization

    The various data structures are organized as follows. -

    • +

      • Branch-Based -

        • +

          • basic_branch is an abstract base class for branched-based associative-containers @@ -29,7 +28,7 @@ associative-containers

        • Hash-Based -

          • +

            • basic_hash_table is an abstract base class for hash-based associative-containers @@ -43,12 +42,12 @@ associative-containers

          • List-Based -

            • +

              • list_update list-based update-policy associative container

            • Heap-Based -

              • +

                • priority_queue A priority queue.

              @@ -62,7 +61,7 @@ In addition, there are the following diagnostics classes, used to report errors specific to this library's data structures. -

              Figure 22.7. Exception Hierarchy

              Exception Hierarchy

            Tutorial

            Basic Use

            +

            Figure 22.7. Exception Hierarchy

            Exception Hierarchy

            Tutorial

            Basic Use

            For the most part, the policy-based containers containers in namespace __gnu_pbds have the same interface as the equivalent containers in the standard C++ library, except for @@ -186,7 +185,7 @@

            so all hash-based associative containers inherit the same hash-functor accessor methods. -

            +

            Configuring via Template Parameters

            In general, each of this library's containers is @@ -240,7 +239,7 @@ by one of them.

            Note that as opposed to the std::priority_queue, __gnu_pbds::priority_queue is not a - sequence-adapter; it is a regular container.

            + sequence-adapter; it is a regular container.

            Querying Container Attributes

            A containers underlying data structure affect their performance; Unfortunately, they can also affect @@ -278,7 +277,7 @@

            is the container's invalidation guarantee. Invalidation guarantees are especially important regarding priority queues, since in this library's design, iterators are practically the - only way to manipulate them.

            + only way to manipulate them.

            Point and Range Iteration

            This library differentiates between two types of methods and iterators: point-type, and range-type. For example, @@ -377,11 +376,11 @@

            gives one of three pre-determined types that answer this query. -

            Examples

            +

            Examples

            Additional code examples are provided in the source distribution, as part of the regression and performance testsuite. -

            Intermediate Use

            • +

              Intermediate Use

              • Basic use of maps: basic_map.cc

              • @@ -405,7 +404,7 @@

              • Conditionally erasing values from a priority queue: priority_queue_erase_if.cc -

              Querying with container_traits

              • +

              Querying with container_traits

              • Using container_traits to query about underlying data structure behavior: assoc_container_traits.cc @@ -416,7 +415,7 @@ Using container_traits to query about underlying data structure behavior: priority_queue_container_traits.cc -

              By Container Method

              Hash-Based
              size Related
              • +

              By Container Method

              Hash-Based
              size Related
              • Setting the initial size of a hash-based container object: hash_initial_size.cc @@ -434,7 +433,7 @@

              • Changing the load factors of a hash-based container object: hash_load_set_change.cc -

              Hashing Function Related

              • +

              Hashing Function Related

              • Using a modulo range-hashing function for the case of an unknown skewed key distribution: hash_mod.cc @@ -448,7 +447,7 @@

              • Writing a ranged-hash functor: ranged_hash.cc -

              Branch-Based
              split or join Related
              • +

              Branch-Based
              split or join Related
              • Joining two tree-based container objects: tree_join.cc

              • @@ -458,21 +457,21 @@ Order statistics while joining two tree-based container objects: tree_order_statistics_join.cc -

              Node Invariants
              • +

              Node Invariants
              • Using trees for order statistics: tree_order_statistics.cc

              • Augmenting trees to support operations on line intervals: tree_intervals.cc -

              trie
              • +

              trie
              • Using a PATRICIA trie for DNA strings: trie_dna.cc

              • Using a PATRICIA trie for finding all entries whose key matches a given prefix: trie_prefix_search.cc -

              Priority Queues
              • +

              Priority Queues
              • Cross referencing an associative container and a priority queue: priority_queue_xref.cc

              • @@ -480,4 +479,4 @@ very simple version of Dijkstra's shortest path algorithm: priority_queue_dijkstra.cc -

            +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/profile_mode.html b/libstdc++-v3/doc/html/manual/profile_mode.html index bcfbc95..e44421c 100644 --- a/libstdc++-v3/doc/html/manual/profile_mode.html +++ b/libstdc++-v3/doc/html/manual/profile_mode.html @@ -1,9 +1,8 @@ - -Chapter 19. Profile Mode

    Chapter 19. Profile Mode

    Intro

    Goal: Give performance improvement advice based on recognition of suboptimal usage patterns of the standard library.

    @@ -16,7 +15,7 @@ CGO 2009.

    Strengths: -

    • +

      • Unintrusive solution. The application code does not require any modification.

      • The advice is call context sensitive, thus capable of @@ -27,14 +26,14 @@

      Drawbacks: -

      • +

        • You must recompile the application code with custom options.

        • You must run the application on representative input. The advice is input dependent.

        • The execution time will increase, in some cases by factors.

        -

        Using the Profile Mode

        +

        Using the Profile Mode

        This is the anticipated common workflow for program foo.cc:

         $ cat foo.cc
        @@ -54,7 +53,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
         

        Anatomy of a warning: -

        • +

          • Warning id. This is a short descriptive string for the class that this warning belongs to. E.g., "vector-to-list".

          • @@ -94,11 +93,11 @@ vector-size: improvement = 3: call stack = 0x804842c ... We believe such warnings can help users understand the performance behavior of their application better, which can lead to changes at a higher abstraction level. -

          Tuning the Profile Mode

          Compile time switches and environment variables (see also file +

          Tuning the Profile Mode

          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. -

          • +

            • _GLIBCXX_PROFILE_NO_<diagnostic>: disable specific diagnostics. See section Diagnostics for possible values. @@ -138,9 +137,9 @@ vector-size: improvement = 3: call stack = 0x804842c ... call context. (Environment variable not supported.)

            -

          Bibliography

          +

          Bibliography

          Perflint: A Context Sensitive Performance Advisor for C++ Programs . Lixia Liu. Silvius Rus. Copyright © 2009 . Proceedings of the 2009 International Symposium on Code Generation and Optimization - .

        + .

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/profile_mode_api.html b/libstdc++-v3/doc/html/manual/profile_mode_api.html index 27cb681..1cd1afa 100644 --- a/libstdc++-v3/doc/html/manual/profile_mode_api.html +++ b/libstdc++-v3/doc/html/manual/profile_mode_api.html @@ -1,10 +1,9 @@ - -Extensions for Custom Containers

      Extensions for Custom Containers

      +Extensions for Custom Containers

      Extensions for Custom Containers

      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 profiler.h (look for "Instrumentation hooks"). -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html b/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html index 5392a27..2b9423f 100644 --- a/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html +++ b/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html @@ -1,6 +1,5 @@ - -Empirical Cost Model

      Empirical Cost Model

      +Empirical Cost Model

      Empirical Cost Model

      Currently, the cost model uses formulas with predefined relative weights for alternative containers or container implementations. For instance, iterating through a vector is X times faster than iterating through a list. @@ -15,4 +14,4 @@ filled in either by hand or by an automated training mechanism. The analysis module will then use this database instead of the built in. generic parameters. -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/profile_mode_design.html b/libstdc++-v3/doc/html/manual/profile_mode_design.html index 8fee44a..7f5e1fa 100644 --- a/libstdc++-v3/doc/html/manual/profile_mode_design.html +++ b/libstdc++-v3/doc/html/manual/profile_mode_design.html @@ -1,10 +1,9 @@ - -Design

      Design

      -

      Table 19.1. Profile Code Location

      Code LocationUse
      libstdc++-v3/include/std/*Preprocessor code to redirect to profile extension headers.
      libstdc++-v3/include/profile/*Profile extension public headers (map, vector, ...).
      libstdc++-v3/include/profile/impl/*Profile extension internals. Implementation files are +Design

      Design

      +

      Table 19.1. Profile Code Location

      Code LocationUse
      libstdc++-v3/include/std/*Preprocessor code to redirect to profile extension headers.
      libstdc++-v3/include/profile/*Profile extension public headers (map, vector, ...).
      libstdc++-v3/include/profile/impl/*Profile extension internals. Implementation files are only included from impl/profiler.h, which is the only file included from the public headers.

      -

      Wrapper Model

      +

      Wrapper Model

      In order to get our instrumented library version included instead of the release one, we use the same wrapper model as the debug mode. @@ -25,7 +24,7 @@ Currently, mixing the profile mode with debug and parallel extensions is not allowed. Mixing them at compile time will result in preprocessor errors. Mixing them at link time is undefined. -

      Instrumentation

      +

      Instrumentation

      Instead of instrumenting every public entry and exit point, we chose to add instrumentation on demand, as needed by individual diagnostics. @@ -44,7 +43,7 @@

      All the instrumentation on/off compile time switches live in include/profile/profiler.h. -

      Run Time Behavior

      +

      Run Time Behavior

      For practical reasons, the instrumentation library processes the trace partially rather than dumping it to disk in raw form. Each event is processed when @@ -63,18 +62,18 @@ For details, see paper presented at CGO 2009. -

      Analysis and Diagnostics

      +

      Analysis and Diagnostics

      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.

      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. -

      Cost Model

      +

      Cost Model

      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. -

      • Relative benefit estimation: +

        • Relative benefit estimation: The idea is to estimate or measure the cost of all operations in the original scenario versus the scenario we advise to switch to. For instance, when advising to change a vector to a list, an occurrence @@ -98,7 +97,7 @@ For instance, when considering switching from set to unordered_set, if we detect use of operator ++, we will simply not issue the advice, since this could signal that the use - care require a sorted container.

      Reports

      + care require a sorted container.

      Reports

      There are two types of reports. First, if we recognize a pattern for which we have a substitute that is likely to give better performance, we print the advice and estimated performance gain. The advice is usually associated @@ -110,7 +109,7 @@ the top 10 multimap 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. -

      Testing

      +

      Testing

      First, we want to make sure we preserve the behavior of the release mode. You can just type "make check-profile", which builds and runs the whole test suite in profile mode. @@ -119,4 +118,4 @@ it helps the user focus on the key problems and ignore the uninteresting ones. We created a profile directory in the test suite. Each diagnostic must come with at least two tests, one for false positives and one for false negatives. -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/profile_mode_devel.html b/libstdc++-v3/doc/html/manual/profile_mode_devel.html index 2b6218c..21edaf7 100644 --- a/libstdc++-v3/doc/html/manual/profile_mode_devel.html +++ b/libstdc++-v3/doc/html/manual/profile_mode_devel.html @@ -1,6 +1,5 @@ - -Developer Information

      Developer Information

      Big Picture

      The profile mode headers are included with +Developer Information

      Developer Information

      Big Picture

      The profile mode headers are included with -D_GLIBCXX_PROFILE through preprocessor directives in include/std/*.

      Instrumented implementations are provided in @@ -14,7 +13,7 @@ must ensure (1) that the call is guarded against reentrance and (2) that the call can be turned off at compile time using a -D_GLIBCXX_PROFILE_... compiler option. -

      How To Add A Diagnostic

      Let's say the diagnostic name is "magic". +

      How To Add A Diagnostic

      Let's say the diagnostic name is "magic".

      If you need to instrument a header not already under include/profile/*, first edit the corresponding header under include/std/ and add a preprocessor directive such @@ -42,7 +41,7 @@ All names of methods in namespace __gnu_profile called from profiler.h must start with __trace_magic_.

      Add the implementation of the diagnostic. -

      • +

        • Create new file include/profile/impl/profiler_magic.h.

        • Define class __magic_info: public __object_info_base. @@ -65,4 +64,4 @@ include/profile/impl/profiler_trace.h. Use __trace_vector_to_list as an example.

          Add documentation in file doc/xml/manual/profile_mode.xml. -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html b/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html index ff3d5f9..bc72c2d 100644 --- a/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html +++ b/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html @@ -1,6 +1,5 @@ - -Diagnostics

      Diagnostics

      +Diagnostics

      Diagnostics

      The table below presents all the diagnostics we intend to implement. Each diagnostic has a corresponding compile time switch -D_GLIBCXX_PROFILE_<diagnostic>. @@ -18,7 +17,7 @@ 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. -

      Table 19.2. Profile Diagnostics

      GroupFlagBenefitCostFreq.Implemented 
      +

      Table 19.2. Profile Diagnostics

      GroupFlagBenefitCostFreq.Implemented 
      CONTAINERS HASHTABLE_TOO_SMALL101 10yes
        HASHTABLE_TOO_LARGE51 10yes
        @@ -35,7 +34,7 @@ LOCALITY SOFTWARE_PREFETCH88 5no
        RBTREE_LOCALITY48 5no
        - FALSE_SHARING810 10no

      Diagnostic Template

      • Switch: + FALSE_SHARING

      810 10no

      Diagnostic Template

      • Switch: _GLIBCXX_PROFILE_<diagnostic>.

      • Goal: What problem will it diagnose?

      • Fundamentals:. @@ -52,10 +51,10 @@ program code ... advice sample

        -

      Containers

      +

      Containers

      Switch: _GLIBCXX_PROFILE_CONTAINERS. -

      Hashtable Too Small

      • Switch: +

        Hashtable Too Small

        • Switch: _GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL.

        • Goal: Detect hashtables with many rehash operations, small construction size and large destruction size. @@ -81,7 +80,7 @@ advice sample foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1025530 rehash operations.

          -

        Hashtable Too Large

        • Switch: +

        Hashtable Too Large

        • Switch: _GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE.

        • Goal: Detect hashtables which are never filled up because fewer elements than reserved are ever @@ -110,7 +109,7 @@ foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1 foo.cc:1: advice: Changing initial unordered_set size from 100 to 10 saves N bytes of memory and M iteration steps.

          -

        Inefficient Hash

        • Switch: +

        Inefficient Hash

        • Switch: _GLIBCXX_PROFILE_INEFFICIENT_HASH.

        • Goal: Detect hashtables with polarized distribution. @@ -141,7 +140,7 @@ class dumb_hash { hs.find(i); }

          -

        Vector Too Small

        • Switch: +

        Vector Too Small

        • Switch: _GLIBCXX_PROFILE_VECTOR_TOO_SMALL.

        • Goal:Detect vectors with many resize operations, small construction size and large destruction size.. @@ -166,7 +165,7 @@ class dumb_hash { foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves copying 4000000 bytes and 20 memory allocations and deallocations.

          -

        Vector Too Large

        • Switch: +

        Vector Too Large

        • Switch: _GLIBCXX_PROFILE_VECTOR_TOO_LARGE

        • Goal:Detect vectors which are never filled up because fewer elements than reserved are ever @@ -192,7 +191,7 @@ copying 4000000 bytes and 20 memory allocations and deallocations. foo.cc:1: advice: Changing initial vector size from 100 to 10 saves N bytes of memory and may reduce the number of cache and TLB misses.

          -

        Vector to Hashtable

        • Switch: +

        Vector to Hashtable

        • Switch: _GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE.

        • Goal: Detect uses of vector that can be substituted with unordered_set @@ -223,7 +222,7 @@ bytes of memory and may reduce the number of cache and TLB misses. foo.cc:1: advice: Changing "vector" to "unordered_set" will save about 500,000 comparisons.

          -

        Hashtable to Vector

        • Switch: +

        Hashtable to Vector

        • Switch: _GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR.

        • Goal: Detect uses of unordered_set that can be substituted with vector @@ -252,7 +251,7 @@ comparisons. foo.cc:1: advice: Changing "unordered_set" to "vector" will save about N indirections and may achieve better data locality.

          -

        Vector to List

        • Switch: +

        Vector to List

        • Switch: _GLIBCXX_PROFILE_VECTOR_TO_LIST.

        • Goal: Detect cases where vector could be substituted with list for @@ -282,7 +281,7 @@ indirections and may achieve better data locality. foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000 operations.

          -

        List to Vector

        • Switch: +

        List to Vector

        • Switch: _GLIBCXX_PROFILE_LIST_TO_VECTOR.

        • Goal: Detect cases where list could be substituted with vector for @@ -309,7 +308,7 @@ operations. foo.cc:1: advice: Changing "list" to "vector" will save about 1000000 indirect memory references.

          -

        List to Forward List (Slist)

        • Switch: +

        List to Forward List (Slist)

        • Switch: _GLIBCXX_PROFILE_LIST_TO_SLIST.

        • Goal: Detect cases where list could be substituted with forward_list for @@ -339,7 +338,7 @@ memory references. foo.cc:1: advice: Change "list" to "forward_list".

          -

        Ordered to Unordered Associative Container

        • Switch: +

        Ordered to Unordered Associative Container

        • Switch: _GLIBCXX_PROFILE_ORDERED_TO_UNORDERED.

        • Goal: Detect cases where ordered associative containers can be replaced with unordered ones. @@ -366,9 +365,9 @@ foo.cc:1: advice: Change "list" to "forward_list". 7 sum += *s.find(i); 8 }

          -

      Algorithms

      Switch: +

      Algorithms

      Switch: _GLIBCXX_PROFILE_ALGORITHMS. -

      Sort Algorithm Performance

      • Switch: +

        Sort Algorithm Performance

        • Switch: _GLIBCXX_PROFILE_SORT.

        • Goal: Give measure of sort algorithm performance based on actual input. For instance, advise Radix Sort over @@ -389,9 +388,9 @@ foo.cc:1: advice: Change "list" to "forward_list". Runtime(algo) for algo in [radix, quick, merge, ...]

        • Example:

           

          -

      Data Locality

      Switch: +

      Data Locality

      Switch: _GLIBCXX_PROFILE_LOCALITY. -

      Need Software Prefetch

      • Switch: +

        Need Software Prefetch

        • Switch: _GLIBCXX_PROFILE_SOFTWARE_PREFETCH.

        • Goal: Discover sequences of indirect memory accesses that are not regular, thus cannot be predicted by @@ -434,7 +433,7 @@ foo.cc:1: advice: Change "list" to "forward_list". foo.cc:7: advice: Insert prefetch instruction.

          -

        Linked Structure Locality

        • Switch: +

        Linked Structure Locality

        • Switch: _GLIBCXX_PROFILE_RBTREE_LOCALITY.

        • Goal: Give measure of locality of objects stored in linked structures (lists, red-black trees and hashtables) @@ -479,13 +478,13 @@ foo.cc:7: advice: Insert prefetch instruction. foo.cc:5: advice: High scatter score NNN for set built here. Consider changing the allocation sequence or switching to a structure conscious allocator.

          -

      Multithreaded Data Access

      +

      Multithreaded Data Access

      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.

      Switch: _GLIBCXX_PROFILE_MULTITHREADED. -

      Data Dependence Violations at Container Level

      • Switch: +

        Data Dependence Violations at Container Level

        • Switch: _GLIBCXX_PROFILE_DDTEST.

        • Goal: Detect container elements that are referenced from multiple threads in the parallel region or @@ -509,7 +508,7 @@ the allocation sequence or switching to a structure conscious allocator.

        • Example:

           

          -

        False Sharing

        • Switch: +

        False Sharing

        • Switch: _GLIBCXX_PROFILE_FALSE_SHARING.

        • Goal: Detect elements in the same container which share a cache line, are written by at least one @@ -542,7 +541,7 @@ OMP_NUM_THREADS=2 ./a.out foo.cc:1: advice: Change container structure or padding to avoid false sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.

          -

      Statistics

      +

      Statistics

      Switch: _GLIBCXX_PROFILE_STATISTICS.

      @@ -555,4 +554,4 @@ sharing in multithreaded access at foo.cc:4. Detected N shared cache lines. This diagnostic will not issue any advice, but it will print statistics for each container construction site. The statistics will contain the cost of each operation actually performed on the container. -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/profile_mode_impl.html b/libstdc++-v3/doc/html/manual/profile_mode_impl.html index 97912e6..afe9f8b 100644 --- a/libstdc++-v3/doc/html/manual/profile_mode_impl.html +++ b/libstdc++-v3/doc/html/manual/profile_mode_impl.html @@ -1,6 +1,5 @@ - -Implementation Issues

      Implementation Issues

      Stack Traces

      +Implementation Issues

      Implementation Issues

      Stack Traces

      Accurate stack traces are needed during profiling since we group events by call context and dynamic instance. Without accurate traces, diagnostics may be hard to interpret. For instance, when giving advice to the user @@ -11,24 +10,24 @@ _GLIBCXX_PROFILE_STACK_DEPTH 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. -

      Symbolization of Instruction Addresses

      +

      Symbolization of Instruction Addresses

      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. -

      Concurrency

      +

      Concurrency

      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. -

      Using the Standard Library in the Instrumentation Implementation

      +

      Using the Standard Library in the Instrumentation Implementation

      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. -

      Malloc Hooks

      +

      Malloc Hooks

      User applications/libraries can provide malloc hooks. When the implementation of the malloc hooks uses stdlibc++, there can be an infinite cycle between the profile mode instrumentation and the @@ -42,10 +41,10 @@ uses non-recursive locks. XXX: A definitive solution to this problem would be for the profile extension to use a custom allocator internally, and perhaps not to use libstdc++. -

      Construction and Destruction of Global Objects

      +

      Construction and Destruction of Global Objects

      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 atexit, thus invoked by exit. -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/setup.html b/libstdc++-v3/doc/html/manual/setup.html index 0775645..61f40b7 100644 --- a/libstdc++-v3/doc/html/manual/setup.html +++ b/libstdc++-v3/doc/html/manual/setup.html @@ -1,9 +1,8 @@ - -Chapter 2. Setup

      Chapter 2. Setup

      To transform libstdc++ sources into installed include files and properly built binaries useful for linking to other software is a multi-step process. Steps include getting the sources, configuring and building the sources, testing, and installation. @@ -19,7 +18,7 @@ make install

      Each step is described in more detail in the following sections. -

      Prerequisites

      +

      Prerequisites

      Because libstdc++ is part of GCC, the primary source for installation instructions is the GCC install page. @@ -42,7 +41,7 @@ Hacking in the appendix for full details.

      Finally, a few system-specific requirements: -

      linux

      +

      linux

      If GCC 3.1.0 or later on is being used on GNU/Linux, an attempt will be made to use "C" library functionality necessary for C++ named locale support. For GCC 4.6.0 and later, this @@ -84,7 +83,7 @@ zh_TW BIG5 libstdc++ after "C" locales are installed is not necessary.

      To install support for locales, do only one of the following: -

      • install all locales

      • install just the necessary locales

        • with Debian GNU/Linux:

          Add the above list, as shown, to the file +

          • install all locales

          • install just the necessary locales

            • with Debian GNU/Linux:

              Add the above list, as shown, to the file /etc/locale.gen

              run /usr/sbin/locale-gen

            • on most Unix-like operating systems:

              localedef -i de_DE -f ISO-8859-1 de_DE

              (repeat for each entry in the above list)

            • Instructions for other operating systems solicited. -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/source_code_style.html b/libstdc++-v3/doc/html/manual/source_code_style.html index 180e638..8c41731 100644 --- a/libstdc++-v3/doc/html/manual/source_code_style.html +++ b/libstdc++-v3/doc/html/manual/source_code_style.html @@ -1,10 +1,9 @@ - -Coding Style

      Coding Style

      +

      Bad Identifiers

      Identifiers that conflict and should be avoided.


            This is the list of names “reserved to the
      @@ -192,7 +191,7 @@       // long double conversion members mangled as __opr
            // http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html
            __opr
      -    

      By Example


      +    

      By Example


            This library is written to appropriate C++ coding standards. As such,
            it is intended to precede the recommendations of the GNU Coding
            Standard, which can be referenced in full here:
      @@ -617,4 +616,4 @@         }
            } // namespace std
            
      -    

      +    

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/source_design_notes.html b/libstdc++-v3/doc/html/manual/source_design_notes.html index 5d738bc..0c36b98 100644 --- a/libstdc++-v3/doc/html/manual/source_design_notes.html +++ b/libstdc++-v3/doc/html/manual/source_design_notes.html @@ -1,9 +1,8 @@ - -Design Notes

      Design Notes



          The Library
      @@ -860,4 +859,4 @@   

      +
      \ 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 65457f1..ae49afa 100644 --- a/libstdc++-v3/doc/html/manual/source_organization.html +++ b/libstdc++-v3/doc/html/manual/source_organization.html @@ -1,9 +1,8 @@ - -Directory Layout and Source Conventions

      Directory Layout and Source Conventions

      The unpacked source directory of libstdc++ contains the files needed to create the GNU C++ Library.


      @@ -94,4 +93,4 @@ indicate a place that may require attention for multi-thread safety.

      + Home Coding Style
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index b8c96b5..81d45cf 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -1,14 +1,13 @@ - -Chapter 1. Status

      Chapter 1. Status

      Implementation Status

      C++ 1998/2003

      Implementation Status

      This status table is based on the table of contents of ISO/IEC 14882:2003.

      This page describes the C++ support in mainline GCC SVN, not in any particular release. -

      Table 1.1. C++ 1998/2003 Implementation Status

      SectionDescriptionStatusComments
      +

      Table 1.1. C++ 1998/2003 Implementation Status

      SectionDescriptionStatusComments
      18 Language support @@ -52,9 +51,9 @@ particular release. Appendix D Compatibility features -
      D.1Increment operator with bool operand  
      D.2static keyword  
      D.3Access declarations  
      D.4Implicit conversion from const strings  
      D.5C standard library headers  
      D.6Old iostreams members  
      D.7char* streams  

      Implementation Specific Behavior

      +

      D.1Increment operator with bool operand  
      D.2static keyword  
      D.3Access declarations  
      D.4Implicit conversion from const strings  
      D.5C standard library headers  
      D.6Old iostreams members  
      D.7char* streams  

      Implementation Specific Behavior

      The ISO standard defines the following phrase: -

      +

      [1.3.5] implementation-defined behavior

      Behavior, for a well-formed program construct and correct data, that @@ -142,7 +141,7 @@ particular release. in this chapter.

      [27.8.1.4]/16 Calling fstream::sync when a get area exists will... whatever fflush() does, I think. -

      C++ 2011

      +

      C++ 2011

      This table is based on the table of contents of ISO/IEC JTC1 SC22 WG21 Doc No: N3290 Date: 2011-04-11 @@ -158,11 +157,15 @@ presence of the required flag.

      This page describes the C++11 support in mainline GCC SVN, not in any particular release. -

      Table 1.2. C++ 2011 Implementation Status

      SectionDescriptionStatusComments
      +

      Table 1.2. C++ 2011 Implementation Status

      SectionDescriptionStatusComments
      18 Language support -
      18.1GeneralY 
      18.2TypesPartialMissing offsetof, max_align_t
      18.3Implementation properties  
      18.3.2Numeric Limits  
      18.3.2.3Class template numeric_limitsY 
      18.3.2.4numeric_limits membersY 
      18.3.2.5float_round_styleN 
      18.3.2.6float_denorm_styleN 
      18.3.2.7numeric_limits specializationsY 
      18.3.3C LibraryY 
      18.4Integer types  
      18.4.1Header <cstdint> synopsisY 
      18.5Start and terminationPartialC library dependency for quick_exit, at_quick_exit
      18.6Dynamic memory managementY 
      18.7Type identification  
      18.7.1Class type_infoY 
      18.7.2Class bad_castY 
      18.7.3Class bad_typeidY 
      18.8Exception handling  
      18.8.1Class exceptionY 
      18.8.2Class bad_exceptionY 
      18.8.3Abnormal terminationY 
      18.8.4uncaught_exceptionY 
      18.8.5Exception PropagationY 
      18.8.6nested_exceptionY 
      18.9Initializer lists  
      18.9.1Initializer list constructorsY 
      18.9.2Initializer list accessY 
      18.9.3Initializer list range accessY 
      18.10Other runtime supportY 
      +
      18.1GeneralY 
      18.2TypesPartialMissing offsetof, max_align_t
      18.3Implementation properties  
      18.3.2Numeric Limits  
      18.3.2.3Class template numeric_limitsY 
      18.3.2.4numeric_limits membersY 
      18.3.2.5float_round_styleN 
      18.3.2.6float_denorm_styleN 
      18.3.2.7numeric_limits specializationsY 
      18.3.3C LibraryY 
      18.4Integer types  
      18.4.1Header <cstdint> synopsisY 
      18.5Start and terminationPartialC library dependency for quick_exit, at_quick_exit
      18.6Dynamic memory managementPartialMissing get_new_handler. + set_new_handler is not thread-safe. +
      18.7Type identification  
      18.7.1Class type_infoY 
      18.7.2Class bad_castY 
      18.7.3Class bad_typeidY 
      18.8Exception handling  
      18.8.1Class exceptionY 
      18.8.2Class bad_exceptionY 
      18.8.3Abnormal terminationPartialMissing get_terminate. + set_terminate is not thread-safe. +
      18.8.4uncaught_exceptionY 
      18.8.5Exception PropagationY 
      18.8.6nested_exceptionY 
      18.9Initializer lists  
      18.9.1Initializer list constructorsY 
      18.9.2Initializer list accessY 
      18.9.3Initializer list range accessY 
      18.10Other runtime supportY 
      19 Diagnostics @@ -241,7 +244,9 @@ particular release. Appendix D Compatibility features -
      D.1Increment operator with bool operand  
      D.2register keyword  
      D.3Implicit declaration of copy functions  
      D.4Dynamic exception specifications  
      D.5C standard library headers  
      D.6Old iostreams members  
      D.7char* streams  
      D.8Function objects  
      D.9Binders  
      D.10auto_ptr  
      D.11Violating exception-specifications  

      Implementation Specific Behavior

      For behaviour which is also specified by the 1998 and 2003 standards, +

      D.1Increment operator with bool operand  
      D.2register keyword  
      D.3Implicit declaration of copy functions  
      D.4Dynamic exception specifications  
      D.5C standard library headers  
      D.6Old iostreams members  
      D.7char* streams  
      D.8Function objects  
      D.9Binders  
      D.10auto_ptr  
      D.11Violating exception-specificationsPartialMissing get_unexpected. + set_unexpected is not thread-safe. +

      Implementation Specific Behavior

      For behaviour which is also specified by the 1998 and 2003 standards, see C++ 1998/2003 Implementation Specific Behavior. This section only documents behaviour which is new in the 2011 standard. @@ -250,11 +255,18 @@ particular release. placeholders defined and the placeholder types are CopyAssignable.

      + 23.5.4.2 [unord.map.cnstr], + 23.5.5.2 [unord.multimap.cnstr], + 23.5.6.2 [unord.set.cnstr], + 23.5.7.2 [unord.multiset.cnstr] + The default bucket count is 10 for the default constructors + and 0 for the range constructors and initializer-list constructors. +

      30.2.3 [thread.req.native]/1 native_handle_type and native_handle are provided. The handle types are defined in terms of the Gthreads abstraction layer. -

      • thread: The native handle type is +

        • thread: The native handle type is a typedef for __gthread_t i.e. pthread_t when GCC is configured with the posix thread model. The value of the native handle is undefined for a thread @@ -279,7 +291,7 @@ particular release. launch is a scoped enumeration type with overloaded operators to support bitmask operations. There are no additional bitmask elements defined. -

      C++ TR1

      +

      C++ TR1

      This table is based on the table of contents of ISO/IEC DTR 19768 Doc No: N1836=05-0096 Date: 2005-06-24 Draft Technical Report on C++ Library Extensions @@ -290,12 +302,12 @@ In this implementation the header names are prefixed by

      This page describes the TR1 support in mainline GCC SVN, not in any particular release. -

      Table 1.3. C++ TR1 Implementation Status

      SectionDescriptionStatusComments
      2General Utilities
      2.1Reference wrappers  
      2.1.1Additions to header <functional> synopsisY 
      2.1.2Class template reference_wrapper  
      2.1.2.1reference_wrapper construct/copy/destroyY 
      2.1.2.2reference_wrapper assignmentY 
      2.1.2.3reference_wrapper accessY 
      2.1.2.4reference_wrapper invocationY 
      2.1.2.5reference_wrapper helper functionsY 
      2.2Smart pointers  
      2.2.1Additions to header <memory> synopsisY 
      2.2.2Class bad_weak_ptrY 
      2.2.3Class template shared_ptr  +

      Table 1.3. C++ TR1 Implementation Status

      SectionDescriptionStatusComments
      2General Utilities
      2.1Reference wrappers  
      2.1.1Additions to header <functional> synopsisY 
      2.1.2Class template reference_wrapper  
      2.1.2.1reference_wrapper construct/copy/destroyY 
      2.1.2.2reference_wrapper assignmentY 
      2.1.2.3reference_wrapper accessY 
      2.1.2.4reference_wrapper invocationY 
      2.1.2.5reference_wrapper helper functionsY 
      2.2Smart pointers  
      2.2.1Additions to header <memory> synopsisY 
      2.2.2Class bad_weak_ptrY 
      2.2.3Class template shared_ptr 

      Uses code from boost::shared_ptr.

      -
      2.2.3.1shared_ptr constructorsY 
      2.2.3.2shared_ptr destructorY 
      2.2.3.3shared_ptr assignmentY 
      2.2.3.4shared_ptr modifiersY 
      2.2.3.5shared_ptr observersY 
      2.2.3.6shared_ptr comparisonY 
      2.2.3.7shared_ptr I/OY 
      2.2.3.8shared_ptr specialized algorithmsY 
      2.2.3.9shared_ptr castsY 
      2.2.3.10get_deleterY 
      2.2.4Class template weak_ptr  
      2.2.4.1weak_ptr constructorsY 
      2.2.4.2weak_ptr destructorY 
      2.2.4.3weak_ptr assignmentY 
      2.2.4.4weak_ptr modifiersY 
      2.2.4.5weak_ptr observersY 
      2.2.4.6weak_ptr comparisonY 
      2.2.4.7weak_ptr specialized algorithmsY 
      2.2.5Class template enable_shared_from_thisY 
      3Function Objects
      3.1DefinitionsY 
      3.2Additions to <functional> synopsisY 
      3.3RequirementsY 
      3.4Function return typesY 
      3.5Function template mem_fnY 
      3.6Function object binders  
      3.6.1Class template is_bind_expressionY 
      3.6.2Class template is_placeholderY 
      3.6.3Function template bindY 
      3.6.4PlaceholdersY 
      3.7Polymorphic function wrappers  
      3.7.1Class bad_function_callY 
      3.7.1.1bad_function_call constructorY 
      3.7.2Class template function  
      3.7.2.1function construct/copy/destroyY 
      3.7.2.2function modifiersY 
      3.7.2.3function capacityY 
      3.7.2.4function invocationY 
      3.7.2.5function target accessY 
      3.7.2.6undefined operatorsY 
      3.7.2.7null pointer comparison operatorsY 
      3.7.2.8specialized algorithmsY 
      4Metaprogramming and type traits
      4.1RequirementsY 
      4.2Header <type_traits> synopsisY 
      4.3Helper classesY 
      4.4General RequirementsY 
      4.5Unary Type Traits  
      4.5.1Primary Type CategoriesY 
      4.5.2Composite type traitsY 
      4.5.3Type propertiesY 
      4.6Relationships between typesY 
      4.7Transformations between types  
      4.7.1Const-volatile modificationsY 
      4.7.2Reference modificationsY 
      4.7.3Array modificationsY 
      4.7.4Pointer modificationsY 
      4.8Other transformationsY 
      4.9Implementation requirementsY 
      5Numerical Facilities
      5.1Random number generation  
      5.1.1RequirementsY 
      5.1.2Header <random> synopsisY 
      5.1.3Class template variate_generatorY 
      5.1.4Random number engine class templatesY 
      5.1.4.1Class template linear_congruentialY 
      5.1.4.2Class template mersenne_twisterY 
      5.1.4.3Class template subtract_with_carryY 
      5.1.4.4Class template subtract_with_carry_01Y 
      5.1.4.5Class template discard_blockY 
      5.1.4.6Class template xor_combineYoperator()() per N2079
      5.1.5Engines with predefined parametersY 
      5.1.6Class random_deviceY 
      5.1.7Random distribution class templatesY 
      5.1.7.1Class template uniform_intY 
      5.1.7.2Class bernoulli_distributionY 
      5.1.7.3Class template geometric_distributionY 
      5.1.7.4Class template poisson_distributionY 
      5.1.7.5Class template binomial_distributionY 
      5.1.7.6Class template uniform_realY 
      5.1.7.7Class template exponential_distributionY 
      5.1.7.8Class template normal_distributionY 
      5.1.7.9Class template gamma_distributionY 
      5.2Mathematical special functionsY 
      5.2.1Additions to header <cmath> synopsisY 
      5.2.1.1associated Laguerre polynomialsY 
      5.2.1.2associated Legendre functionsY 
      5.2.1.3beta functionY 
      5.2.1.4(complete) elliptic integral of the first kindY 
      5.2.1.5(complete) elliptic integral of the second kindY 
      5.2.1.6(complete) elliptic integral of the third kindY 
      5.2.1.7confluent hypergeometric functionsY 
      5.2.1.8regular modified cylindrical Bessel functionsY 
      5.2.1.9cylindrical Bessel functions (of the first kind)Y 
      5.2.1.10irregular modified cylindrical Bessel functionsY 
      5.2.1.11cylindrical Neumann functionsY 
      5.2.1.12(incomplete) elliptic integral of the first kindY 
      5.2.1.13(incomplete) elliptic integral of the second kindY 
      5.2.1.14(incomplete) elliptic integral of the third kindY 
      5.2.1.15exponential integralY 
      5.2.1.16Hermite polynomialsY 
      5.2.1.17hypergeometric functionsY 
      5.2.1.18Laguerre polynomialsY 
      5.2.1.19Legendre polynomialsY 
      5.2.1.20Riemann zeta functionY 
      5.2.1.21spherical Bessel functions (of the first kind)Y 
      5.2.1.22spherical associated Legendre functionsY 
      5.2.1.23spherical Neumann functionsY 
      5.2.2Additions to header <math.h> synopsisY 
      6Containers
      6.1Tuple typesY 
      6.1.1Header <tuple> synopsisY 
      6.1.2Additions to header <utility> synopsisY 
      6.1.3Class template tupleY 
      6.1.3.1ConstructionY 
      6.1.3.2Tuple creation functionsY 
      6.1.3.3Tuple helper classesY 
      6.1.3.4Element accessY 
      6.1.3.5Relational operatorsY 
      6.1.4PairsY 
      6.2Fixed size arrayY 
      6.2.1Header <array> synopsisY 
      6.2.2Class template arrayY 
      6.2.2.1array constructors, copy, and assignmentY 
      6.2.2.2array specialized algorithmsY 
      6.2.2.3array sizeY 
      6.2.2.4Zero sized arraysY 
      6.2.2.5Tuple interface to class template arrayY 
      6.3Unordered associative containersY 
      6.3.1Unordered associative container requirementsY 
      6.3.1.1Exception safety guaranteesY 
      6.3.2Additions to header <functional> synopsisY 
      6.3.3Class template hashY 
      6.3.4Unordered associative container classesY 
      6.3.4.1Header <unordered_set> synopsisY 
      6.3.4.2Header <unordered_map> synopsisY 
      6.3.4.3Class template unordered_setY 
      6.3.4.3.1unordered_set constructorsY 
      6.3.4.3.2unordered_set swapY 
      6.3.4.4Class template unordered_mapY 
      6.3.4.4.1unordered_map constructorsY 
      6.3.4.4.2unordered_map element accessY 
      6.3.4.4.3unordered_map swapY 
      6.3.4.5Class template unordered_multisetY 
      6.3.4.5.1unordered_multiset constructorsY 
      6.3.4.5.2unordered_multiset swapY 
      6.3.4.6Class template unordered_multimapY 
      6.3.4.6.1unordered_multimap constructorsY 
      6.3.4.6.2unordered_multimap swapY 
      7Regular Expressions
      7.1DefinitionsN 
      7.2RequirementsN 
      7.3Regular expressions summaryN 
      7.4Header <regex> synopsisN 
      7.5Namespace tr1::regex_constantsN 
      7.5.1Bitmask Type syntax_option_typeN 
      7.5.2Bitmask Type regex_constants::match_flag_typeN 
      7.5.3Implementation defined error_typeN 
      7.6Class regex_errorN 
      7.7Class template regex_traitsN 
      7.8Class template basic_regexN 
      7.8.1basic_regex constantsN 
      7.8.2basic_regex constructorsN 
      7.8.3basic_regex assignN 
      7.8.4basic_regex constant operationsN 
      7.8.5basic_regex localeN 
      7.8.6basic_regex swapN 
      7.8.7basic_regex non-member functionsN 
      7.8.7.1basic_regex non-member swapN 
      7.9Class template sub_matchN 
      7.9.1sub_match membersN 
      7.9.2sub_match non-member operatorsN 
      7.10Class template match_resultsN 
      7.10.1match_results constructorsN 
      7.10.2match_results sizeN 
      7.10.3match_results element accessN 
      7.10.4match_results formattingN 
      7.10.5match_results allocatorN 
      7.10.6match_results swapN 
      7.11Regular expression algorithmsN 
      7.11.1exceptionsN 
      7.11.2regex_matchN 
      7.11.3regex_searchN 
      7.11.4regex_replaceN 
      7.12Regular expression IteratorsN 
      7.12.1Class template regex_iteratorN 
      7.12.1.1regex_iterator constructorsN 
      7.12.1.2regex_iterator comparisonsN 
      7.12.1.3regex_iterator dereferenceN 
      7.12.1.4regex_iterator incrementN 
      7.12.2Class template regex_token_iteratorN 
      7.12.2.1regex_token_iterator constructorsN 
      7.12.2.2regex_token_iterator comparisonsN 
      7.12.2.3regex_token_iterator dereferenceN 
      7.12.2.4regex_token_iterator incrementN 
      7.13Modified ECMAScript regular expression grammarN 
      8C Compatibility
      8.1Additions to header <complex>Y 
      8.1.1SynopsisY 
      8.1.2Function acosY 
      8.1.3Function asinY 
      8.1.4Function atanY 
      8.1.5Function acoshY 
      8.1.6Function asinhY 
      8.1.7Function atanhY 
      8.1.8Function fabsY 
      8.1.9Additional OverloadsY 
      8.2Header <ccomplex>NDR 551
      8.3Header <complex.h>NDR 551
      8.4Additions to header <cctype>Y 
      8.4.1SynopsisY 
      8.4.2Function isblankY 
      8.5Additions to header <ctype.h>Y 
      8.6Header <cfenv>Y 
      8.6.1SynopsisY 
      8.6.2DefinitionsY 
      8.7Header <fenv.h>Y 
      8.8Additions to header <cfloat>Y 
      8.9Additions to header <float.h>Y 
      8.10Additions to header <ios>N 
      8.10.1SynopsisN 
      8.10.2Function hexfloatN 
      8.11Header <cinttypes>Y 
      8.11.1SynopsisYDR 557
      8.11.2DefinitionsY 
      8.12Header <inttypes.h>Y 
      8.13Additions to header <climits>Y 
      8.14Additions to header <limits.h>Y 
      8.15Additions to header <locale>N 
      8.16Additions to header <cmath>Y 
      8.16.1SynopsisY 
      8.16.2DefinitionsY 
      8.16.3Function template definitionsY 
      8.16.4Additional overloadsYDR 568; DR 550
      8.17Additions to header <math.h>Y 
      8.18Additions to header <cstdarg>Y 
      8.19Additions to header <stdarg.h>Y 
      8.20The header <cstdbool>Y 
      8.21The header <stdbool.h>Y 
      8.22The header <cstdint>Y 
      8.22.1SynopsisY 
      8.22.2DefinitionsY 
      8.23The header <stdint.h>Y 
      8.24Additions to header <cstdio>Y 
      8.24.1SynopsisY 
      8.24.2DefinitionsY 
      8.24.3Additional format specifiersYC library dependency
      8.24.4Additions to header <stdio.h>Y 
      8.25Additions to header <cstdlib>Y 
      8.25.1SynopsisY 
      8.25.2DefinitionsY 
      8.25.3Function absY 
      8.25.4Function divY 
      8.26Additions to header <stdlib.h>Y 
      8.27Header <ctgmath>YDR 551
      8.28Header <tgmath.h>YDR 551
      8.29Additions to header <ctime>YC library dependency
      8.30Additions to header <cwchar>Y 
      8.30.1SynopsisY 
      8.30.2DefinitionsY 
      8.30.3Additional wide format specifiersYC library dependency
      8.31Additions to header <wchar.h>Y 
      8.32Additions to header <cwctype>Y 
      8.32.1SynopsisY 
      8.32.2Function iswblankY 
      8.33Additions to header <wctype.h>Y 

      Implementation Specific Behavior

      For behaviour which is specified by the 1998 and 2003 standards, +

      2.2.3.1shared_ptr constructorsY 
      2.2.3.2shared_ptr destructorY 
      2.2.3.3shared_ptr assignmentY 
      2.2.3.4shared_ptr modifiersY 
      2.2.3.5shared_ptr observersY 
      2.2.3.6shared_ptr comparisonY 
      2.2.3.7shared_ptr I/OY 
      2.2.3.8shared_ptr specialized algorithmsY 
      2.2.3.9shared_ptr castsY 
      2.2.3.10get_deleterY 
      2.2.4Class template weak_ptr  
      2.2.4.1weak_ptr constructorsY 
      2.2.4.2weak_ptr destructorY 
      2.2.4.3weak_ptr assignmentY 
      2.2.4.4weak_ptr modifiersY 
      2.2.4.5weak_ptr observersY 
      2.2.4.6weak_ptr comparisonY 
      2.2.4.7weak_ptr specialized algorithmsY 
      2.2.5Class template enable_shared_from_thisY 
      3Function Objects
      3.1DefinitionsY 
      3.2Additions to <functional> synopsisY 
      3.3RequirementsY 
      3.4Function return typesY 
      3.5Function template mem_fnY 
      3.6Function object binders  
      3.6.1Class template is_bind_expressionY 
      3.6.2Class template is_placeholderY 
      3.6.3Function template bindY 
      3.6.4PlaceholdersY 
      3.7Polymorphic function wrappers  
      3.7.1Class bad_function_callY 
      3.7.1.1bad_function_call constructorY 
      3.7.2Class template function  
      3.7.2.1function construct/copy/destroyY 
      3.7.2.2function modifiersY 
      3.7.2.3function capacityY 
      3.7.2.4function invocationY 
      3.7.2.5function target accessY 
      3.7.2.6undefined operatorsY 
      3.7.2.7null pointer comparison operatorsY 
      3.7.2.8specialized algorithmsY 
      4Metaprogramming and type traits
      4.1RequirementsY 
      4.2Header <type_traits> synopsisY 
      4.3Helper classesY 
      4.4General RequirementsY 
      4.5Unary Type Traits  
      4.5.1Primary Type CategoriesY 
      4.5.2Composite type traitsY 
      4.5.3Type propertiesY 
      4.6Relationships between typesY 
      4.7Transformations between types  
      4.7.1Const-volatile modificationsY 
      4.7.2Reference modificationsY 
      4.7.3Array modificationsY 
      4.7.4Pointer modificationsY 
      4.8Other transformationsY 
      4.9Implementation requirementsY 
      5Numerical Facilities
      5.1Random number generation  
      5.1.1RequirementsY 
      5.1.2Header <random> synopsisY 
      5.1.3Class template variate_generatorY 
      5.1.4Random number engine class templatesY 
      5.1.4.1Class template linear_congruentialY 
      5.1.4.2Class template mersenne_twisterY 
      5.1.4.3Class template subtract_with_carryY 
      5.1.4.4Class template subtract_with_carry_01Y 
      5.1.4.5Class template discard_blockY 
      5.1.4.6Class template xor_combineYoperator()() per N2079
      5.1.5Engines with predefined parametersY 
      5.1.6Class random_deviceY 
      5.1.7Random distribution class templatesY 
      5.1.7.1Class template uniform_intY 
      5.1.7.2Class bernoulli_distributionY 
      5.1.7.3Class template geometric_distributionY 
      5.1.7.4Class template poisson_distributionY 
      5.1.7.5Class template binomial_distributionY 
      5.1.7.6Class template uniform_realY 
      5.1.7.7Class template exponential_distributionY 
      5.1.7.8Class template normal_distributionY 
      5.1.7.9Class template gamma_distributionY 
      5.2Mathematical special functionsY 
      5.2.1Additions to header <cmath> synopsisY 
      5.2.1.1associated Laguerre polynomialsY 
      5.2.1.2associated Legendre functionsY 
      5.2.1.3beta functionY 
      5.2.1.4(complete) elliptic integral of the first kindY 
      5.2.1.5(complete) elliptic integral of the second kindY 
      5.2.1.6(complete) elliptic integral of the third kindY 
      5.2.1.7confluent hypergeometric functionsY 
      5.2.1.8regular modified cylindrical Bessel functionsY 
      5.2.1.9cylindrical Bessel functions (of the first kind)Y 
      5.2.1.10irregular modified cylindrical Bessel functionsY 
      5.2.1.11cylindrical Neumann functionsY 
      5.2.1.12(incomplete) elliptic integral of the first kindY 
      5.2.1.13(incomplete) elliptic integral of the second kindY 
      5.2.1.14(incomplete) elliptic integral of the third kindY 
      5.2.1.15exponential integralY 
      5.2.1.16Hermite polynomialsY 
      5.2.1.17hypergeometric functionsY 
      5.2.1.18Laguerre polynomialsY 
      5.2.1.19Legendre polynomialsY 
      5.2.1.20Riemann zeta functionY 
      5.2.1.21spherical Bessel functions (of the first kind)Y 
      5.2.1.22spherical associated Legendre functionsY 
      5.2.1.23spherical Neumann functionsY 
      5.2.2Additions to header <math.h> synopsisY 
      6Containers
      6.1Tuple typesY 
      6.1.1Header <tuple> synopsisY 
      6.1.2Additions to header <utility> synopsisY 
      6.1.3Class template tupleY 
      6.1.3.1ConstructionY 
      6.1.3.2Tuple creation functionsY 
      6.1.3.3Tuple helper classesY 
      6.1.3.4Element accessY 
      6.1.3.5Relational operatorsY 
      6.1.4PairsY 
      6.2Fixed size arrayY 
      6.2.1Header <array> synopsisY 
      6.2.2Class template arrayY 
      6.2.2.1array constructors, copy, and assignmentY 
      6.2.2.2array specialized algorithmsY 
      6.2.2.3array sizeY 
      6.2.2.4Zero sized arraysY 
      6.2.2.5Tuple interface to class template arrayY 
      6.3Unordered associative containersY 
      6.3.1Unordered associative container requirementsY 
      6.3.1.1Exception safety guaranteesY 
      6.3.2Additions to header <functional> synopsisY 
      6.3.3Class template hashY 
      6.3.4Unordered associative container classesY 
      6.3.4.1Header <unordered_set> synopsisY 
      6.3.4.2Header <unordered_map> synopsisY 
      6.3.4.3Class template unordered_setY 
      6.3.4.3.1unordered_set constructorsY 
      6.3.4.3.2unordered_set swapY 
      6.3.4.4Class template unordered_mapY 
      6.3.4.4.1unordered_map constructorsY 
      6.3.4.4.2unordered_map element accessY 
      6.3.4.4.3unordered_map swapY 
      6.3.4.5Class template unordered_multisetY 
      6.3.4.5.1unordered_multiset constructorsY 
      6.3.4.5.2unordered_multiset swapY 
      6.3.4.6Class template unordered_multimapY 
      6.3.4.6.1unordered_multimap constructorsY 
      6.3.4.6.2unordered_multimap swapY 
      7Regular Expressions
      7.1DefinitionsN 
      7.2RequirementsN 
      7.3Regular expressions summaryN 
      7.4Header <regex> synopsisN 
      7.5Namespace tr1::regex_constantsN 
      7.5.1Bitmask Type syntax_option_typeN 
      7.5.2Bitmask Type regex_constants::match_flag_typeN 
      7.5.3Implementation defined error_typeN 
      7.6Class regex_errorN 
      7.7Class template regex_traitsN 
      7.8Class template basic_regexN 
      7.8.1basic_regex constantsN 
      7.8.2basic_regex constructorsN 
      7.8.3basic_regex assignN 
      7.8.4basic_regex constant operationsN 
      7.8.5basic_regex localeN 
      7.8.6basic_regex swapN 
      7.8.7basic_regex non-member functionsN 
      7.8.7.1basic_regex non-member swapN 
      7.9Class template sub_matchN 
      7.9.1sub_match membersN 
      7.9.2sub_match non-member operatorsN 
      7.10Class template match_resultsN 
      7.10.1match_results constructorsN 
      7.10.2match_results sizeN 
      7.10.3match_results element accessN 
      7.10.4match_results formattingN 
      7.10.5match_results allocatorN 
      7.10.6match_results swapN 
      7.11Regular expression algorithmsN 
      7.11.1exceptionsN 
      7.11.2regex_matchN 
      7.11.3regex_searchN 
      7.11.4regex_replaceN 
      7.12Regular expression IteratorsN 
      7.12.1Class template regex_iteratorN 
      7.12.1.1regex_iterator constructorsN 
      7.12.1.2regex_iterator comparisonsN 
      7.12.1.3regex_iterator dereferenceN 
      7.12.1.4regex_iterator incrementN 
      7.12.2Class template regex_token_iteratorN 
      7.12.2.1regex_token_iterator constructorsN 
      7.12.2.2regex_token_iterator comparisonsN 
      7.12.2.3regex_token_iterator dereferenceN 
      7.12.2.4regex_token_iterator incrementN 
      7.13Modified ECMAScript regular expression grammarN 
      8C Compatibility
      8.1Additions to header <complex>Y 
      8.1.1SynopsisY 
      8.1.2Function acosY 
      8.1.3Function asinY 
      8.1.4Function atanY 
      8.1.5Function acoshY 
      8.1.6Function asinhY 
      8.1.7Function atanhY 
      8.1.8Function fabsY 
      8.1.9Additional OverloadsY 
      8.2Header <ccomplex>NDR 551
      8.3Header <complex.h>NDR 551
      8.4Additions to header <cctype>Y 
      8.4.1SynopsisY 
      8.4.2Function isblankY 
      8.5Additions to header <ctype.h>Y 
      8.6Header <cfenv>Y 
      8.6.1SynopsisY 
      8.6.2DefinitionsY 
      8.7Header <fenv.h>Y 
      8.8Additions to header <cfloat>Y 
      8.9Additions to header <float.h>Y 
      8.10Additions to header <ios>N 
      8.10.1SynopsisN 
      8.10.2Function hexfloatN 
      8.11Header <cinttypes>Y 
      8.11.1SynopsisYDR 557
      8.11.2DefinitionsY 
      8.12Header <inttypes.h>Y 
      8.13Additions to header <climits>Y 
      8.14Additions to header <limits.h>Y 
      8.15Additions to header <locale>N 
      8.16Additions to header <cmath>Y 
      8.16.1SynopsisY 
      8.16.2DefinitionsY 
      8.16.3Function template definitionsY 
      8.16.4Additional overloadsYDR 568; DR 550
      8.17Additions to header <math.h>Y 
      8.18Additions to header <cstdarg>Y 
      8.19Additions to header <stdarg.h>Y 
      8.20The header <cstdbool>Y 
      8.21The header <stdbool.h>Y 
      8.22The header <cstdint>Y 
      8.22.1SynopsisY 
      8.22.2DefinitionsY 
      8.23The header <stdint.h>Y 
      8.24Additions to header <cstdio>Y 
      8.24.1SynopsisY 
      8.24.2DefinitionsY 
      8.24.3Additional format specifiersYC library dependency
      8.24.4Additions to header <stdio.h>Y 
      8.25Additions to header <cstdlib>Y 
      8.25.1SynopsisY 
      8.25.2DefinitionsY 
      8.25.3Function absY 
      8.25.4Function divY 
      8.26Additions to header <stdlib.h>Y 
      8.27Header <ctgmath>YDR 551
      8.28Header <tgmath.h>YDR 551
      8.29Additions to header <ctime>YC library dependency
      8.30Additions to header <cwchar>Y 
      8.30.1SynopsisY 
      8.30.2DefinitionsY 
      8.30.3Additional wide format specifiersYC library dependency
      8.31Additions to header <wchar.h>Y 
      8.32Additions to header <cwctype>Y 
      8.32.1SynopsisY 
      8.32.2Function iswblankY 
      8.33Additions to header <wctype.h>Y 

      Implementation Specific Behavior

      For behaviour which is specified by the 1998 and 2003 standards, see C++ 1998/2003 Implementation Specific Behavior. This section documents behaviour which is required by TR1. @@ -303,7 +315,7 @@ release. 3.6.4 [tr.func.bind.place]/1 There are 29 placeholders defined and the placeholder types are Assignable. -

      C++ TR 24733

      +

      C++ TR 24733

      This table is based on the table of contents of ISO/IEC TR 24733 Date: 2009-08-28 Extension for the programming language C++ to support @@ -311,7 +323,7 @@ decimal floating-point arithmetic

      This page describes the TR 24733 support in mainline GCC SVN, not in any particular release. -

      Table 1.4. C++ TR 24733 Implementation Status

      SectionDescriptionStatusComments
      +

      Table 1.4. C++ TR 24733 Implementation Status

      SectionDescriptionStatusComments
      0 Introduction @@ -334,4 +346,4 @@ particular release.

      + 
      Home License
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/std_contents.html b/libstdc++-v3/doc/html/manual/std_contents.html index f62bf99..88a703e 100644 --- a/libstdc++-v3/doc/html/manual/std_contents.html +++ b/libstdc++-v3/doc/html/manual/std_contents.html @@ -1,8 +1,7 @@ - -Part II.  Standard Contents

      Part II.  Standard Contents

      Table of Contents

      4. Support @@ -13,16 +12,16 @@
      Exceptions
      API Reference
      Adding Data to exception
      Concept Checking
      6. Utilities -
      Functors
      Pairs
      Memory
      Allocators
      Requirements
      Design Issues
      Implementation
      Interface Design
      Selecting Default Allocation Policy
      Disabling Memory Caching
      Using a Specific Allocator
      Custom Allocators
      Extension Allocators
      auto_ptr
      Limitations
      Use in Containers
      shared_ptr
      Requirements
      Design Issues
      Implementation
      Class Hierarchy
      Thread Safety
      Selecting Lock Policy
      Related functions and classes
      Use
      Examples
      Unresolved Issues
      Acknowledgments
      Traits
      7. +
      Functors
      Pairs
      Memory
      Allocators
      Requirements
      Design Issues
      Implementation
      Interface Design
      Selecting Default Allocation Policy
      Disabling Memory Caching
      Using a Specific Allocator
      Custom Allocators
      Extension Allocators
      auto_ptr
      Limitations
      Use in Containers
      shared_ptr
      Requirements
      Design Issues
      Implementation
      Class Hierarchy
      Thread Safety
      Selecting Lock Policy
      Related functions and classes
      Use
      Examples
      Unresolved Issues
      Acknowledgments
      Traits
      7. Strings
      String Classes
      Simple Transformations
      Case Sensitivity
      Arbitrary Character Types
      Tokenizing
      Shrink to Fit
      CString (MFC)
      8. Localization -
      Locales
      locale
      Requirements
      Design
      Implementation
      Interacting with "C" locales
      Future
      Facets
      ctype
      Implementation
      Specializations
      Future
      codecvt
      Requirements
      Design
      wchar_t Size
      Support for Unicode
      Other Issues
      Implementation
      Use
      Future
      messages
      Requirements
      Design
      Implementation
      Models
      The GNU Model
      Use
      Future
      9. +
      Locales
      locale
      Requirements
      Design
      Implementation
      Interacting with "C" locales
      Future
      Facets
      ctype
      Implementation
      Specializations
      Future
      codecvt
      Requirements
      Design
      wchar_t Size
      Support for Unicode
      Other Issues
      Implementation
      Use
      Future
      messages
      Requirements
      Design
      Implementation
      Models
      The GNU Model
      Use
      Future
      9. Containers -
      Sequences
      list
      list::size() is O(n)
      vector
      Space Overhead Management
      Associative
      Insertion Hints
      bitset
      Size Variable
      Type String
      Interacting with C
      Containers vs. Arrays
      10. +
      Sequences
      list
      list::size() is O(n)
      vector
      Space Overhead Management
      Associative
      Insertion Hints
      bitset
      Size Variable
      Type String
      Unordered Associative
      Hash Code
      Hash Code Caching Policy
      Interacting with C
      Containers vs. Arrays
      10. Iterators
      Predefined
      Iterators vs. Pointers
      One Past the End
      11. @@ -43,4 +42,4 @@
      API Reference
      +
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/streambufs.html b/libstdc++-v3/doc/html/manual/streambufs.html index 81e098c..22644ba 100644 --- a/libstdc++-v3/doc/html/manual/streambufs.html +++ b/libstdc++-v3/doc/html/manual/streambufs.html @@ -1,9 +1,8 @@ - -Stream Buffers

      Stream Buffers

      Derived streambuf Classes

      Creating your own stream buffers for I/O can be remarkably easy. If you are interested in doing so, we highly recommend two very excellent books: @@ -57,7 +56,7 @@ include/ext/*_filebuf.h, and in this article by James Kanze: Filtering Streambufs. -

      Buffering

      First, are you sure that you understand buffering? Particularly +

      Buffering

      First, are you sure that you understand buffering? Particularly the fact that C++ may not, in fact, have anything to do with it?

      The rules for buffering can be a little odd, but they aren't any different from those of C. (Maybe that's why they can be a bit @@ -134,4 +133,4 @@

      + Home Memory Based Streams
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/strings.html b/libstdc++-v3/doc/html/manual/strings.html index 9fe4192..bbdfbdc 100644 --- a/libstdc++-v3/doc/html/manual/strings.html +++ b/libstdc++-v3/doc/html/manual/strings.html @@ -1,14 +1,13 @@ - -Chapter 7.  Strings

      Chapter 7.  Strings - -

      String Classes

      Simple Transformations

      + +

      String Classes

      Simple Transformations

      Here are Standard, simple, and portable ways to perform common transformations on a string instance, such as "convert to all upper case." The word transformations @@ -89,7 +88,7 @@ str.erase(notwhite+1);

      Obviously, the calls to find could be inserted directly into the calls to erase, in case your compiler does not optimize named temporaries out of existence. -

      Case Sensitivity

      +

      Case Sensitivity

      The well-known-and-if-it-isn't-well-known-it-ought-to-be Guru of the Week discussions held on Usenet covered this topic in January of 1998. @@ -126,7 +125,7 @@ Unicode Technical Report discussing case handling, which provides some very good information. -

      Arbitrary Character Types

      +

      Arbitrary Character Types

      The std::basic_string is tantalizingly general, in that it is parameterized on the type of the characters which it holds. In theory, you could whip up a Unicode character class and instantiate @@ -180,7 +179,7 @@ nice-looking first attempt turned out to not be conforming C++, due to the rule that CharT must be a POD. (See how tricky this is?) -

      Tokenizing

      +

      Tokenizing

      The Standard C (and C++) function strtok() leaves a lot to be desired in terms of user-friendliness. It's unintuitive, it destroys the character string on which it operates, and it requires @@ -256,7 +255,7 @@ stringtok(Container &container, string const &in, tokenizing as well. Build an istringstream from the input text, and then use std::getline with varying delimiters (the three-argument signature) to extract tokens into a string. -

      Shrink to Fit

      +

      Shrink to Fit

      From GCC 3.4 calling s.reserve(res) on a string s with res < s.capacity() will reduce the string's capacity to std::max(s.size(), res). @@ -272,7 +271,7 @@ stringtok(Container &container, string const &in,

      In C++11 mode you can call s.shrink_to_fit() to achieve the same effect as s.reserve(s.size()). -

      CString (MFC)

      +

      CString (MFC)

      A common lament seen in various newsgroups deals with the Standard string class as opposed to the Microsoft Foundation Class called CString. Often programmers realize that a standard portable @@ -282,7 +281,7 @@ stringtok(Container &container, string const &in,

      Things are not as bad as they seem. In this message, Joe Buck points out a few very important things: -

      • The Standard string supports all the operations +

        • The Standard string supports all the operations that CString does, with three exceptions.

        • Two of those exceptions (whitespace trimming and case conversion) are trivial to implement. In fact, we do so @@ -340,7 +339,7 @@ stringtok(Container &container, string const &in, performance is O(n).

          Joe Buck also pointed out some other things to keep in mind when comparing CString and the Standard string class: -

          • CString permits access to its internal representation; coders +

            • CString permits access to its internal representation; coders who exploited that may have problems moving to string.

            • Microsoft ships the source to CString (in the files MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation @@ -363,4 +362,4 @@ stringtok(Container &container, string const &in,

      +
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/stringstreams.html b/libstdc++-v3/doc/html/manual/stringstreams.html index 6238230..04a16c0 100644 --- a/libstdc++-v3/doc/html/manual/stringstreams.html +++ b/libstdc++-v3/doc/html/manual/stringstreams.html @@ -1,9 +1,8 @@ - -Memory Based Streams

      Memory Based Streams

      Compatibility With strstream

      Stringstreams (defined in the header <sstream>) are in this author's opinion one of the coolest things since sliced time. An example of their use is in the Received Wisdom @@ -34,4 +33,4 @@ memory yourself. The strstreams have been officially deprecated, which means that 1) future revisions of the C++ Standard won't support them, and 2) if you use them, people will laugh at you. -

      +

      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/support.html b/libstdc++-v3/doc/html/manual/support.html index b9e8f65..a685558 100644 --- a/libstdc++-v3/doc/html/manual/support.html +++ b/libstdc++-v3/doc/html/manual/support.html @@ -1,13 +1,12 @@ - -Chapter 4.  Support

      Chapter 4.  Support - +

      This part deals with the functions called and objects created automatically during the course of a program's existence. @@ -16,9 +15,9 @@ need to get your own copy from your nation's member body; see our homepage for help), we can mention a couple of changes in what kind of support a C++ program gets from the Standard Library. -

      Types

      Fundamental Types

      +

      Types

      Fundamental Types

      C++ has the following builtin types: -

      • +

        • char

        • signed char @@ -53,7 +52,7 @@

          Specializing parts of the library on these types is prohibited: instead, use a POD. -

        Numeric Properties

        +

        Numeric Properties

        The header limits defines traits classes to give access to various implementation defined-aspects of the fundamental types. The traits classes -- @@ -99,7 +98,7 @@ static const bool tinyness_before; static const float_round_style round_style; }; -

        NULL

        +

        NULL

        The only change that might affect people is the type of NULL: while it is required to be a macro, the definition of that macro is not allowed @@ -127,4 +126,4 @@ Effective C++ CD example

      +  Home Dynamic Memory
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/termination.html b/libstdc++-v3/doc/html/manual/termination.html index 6c863b0..c18c573 100644 --- a/libstdc++-v3/doc/html/manual/termination.html +++ b/libstdc++-v3/doc/html/manual/termination.html @@ -1,9 +1,8 @@ - -Termination

      Termination

      Termination Handlers

      Not many changes here to cstdlib. You should note that the abort() function does not call the destructors of automatic nor static objects, so if you're @@ -45,7 +44,7 @@ functions, and the compiler/library might already be using some of those slots. If you think you may run out, we recommend using the xatexit/xexit combination from libiberty, which has no such limit. -

      Verbose Terminate Handler

      +

      Verbose Terminate Handler

      If you are having difficulty with uncaught exceptions and want a little bit of help debugging the causes of the core dumps, you can make use of a GNU extension, the verbose terminate handler. @@ -121,4 +120,4 @@ int main(int argc)

      +
      \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/test.html b/libstdc++-v3/doc/html/manual/test.html index 48345b4..222169e 100644 --- a/libstdc++-v3/doc/html/manual/test.html +++ b/libstdc++-v3/doc/html/manual/test.html @@ -1,12 +1,11 @@ - -Test

      Test

      The libstdc++ testsuite includes testing for standard conformance, regressions, ABI, and performance. -

      Organization

      Directory Layout

      +

      Organization

      Directory Layout

      The directory libsrcdir/testsuite contains the individual test cases organized in sub-directories corresponding to chapters of the C++ standard (detailed below), the dejagnu test @@ -77,11 +76,11 @@ util Files for libtestc++, utilities and testing routines.

      All new tests should be written with the policy of one test case, one file in mind. -

      Naming Conventions

      +

      Naming Conventions

      In addition, there are some special names and suffixes that are used within the testsuite to designate particular kinds of tests. -

      • +

        • _xin.cc

          This test case expects some kind of interactive input in order @@ -131,7 +130,7 @@ cat 27_io/objects/char/3_xin.in | a.out analyze runtime performance, for performance regression testing, or for other optimization related analysis. At the moment, these test cases are not run by default. -

      Running the Testsuite

      Basic

      +

    Running the Testsuite

    Basic

    You can check the status of the build without installing it using the dejagnu harness, much like the rest of the gcc tools.

     make check

    in the libbuilddir directory.

    or

     make check-target-libstdc++-v3

    in the gccbuilddir directory. @@ -151,7 +150,7 @@ cat 27_io/objects/char/3_xin.in | a.out archived on a daily basis on the gcc-testresults mailing list. Please check either of these places for a similar combination of source version, operating system, and host CPU. -

    Variations

    +

    Variations

    There are several options for running tests, including testing the regression tests, testing a subset of the regression tests, testing the performance tests, testing just compilation, testing @@ -222,7 +221,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite

    Five files are generated that determine what test files are run. These files are: -

    • +

      • testsuite_files

        This is a list of all the test cases that will be run. Each @@ -277,7 +276,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite We are interested in any strange failures of the testsuite; please email the main libstdc++ mailing list if you see something odd or have questions. -

      Permutations

      +

      Permutations

      To run the libstdc++ test suite under the debug mode, edit libstdc++-v3/scripts/testsuite_flags to add the compile-time flag -D_GLIBCXX_DEBUG to the @@ -297,7 +296,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite Or, just run the testsuites with CXXFLAGS set to -D_GLIBCXX_DEBUG or -D_GLIBCXX_PARALLEL. -

    Writing a new test case

    +

    Writing a new test case

    The first step in making a new test case is to choose the correct directory and file name, given the organization as previously described. @@ -408,7 +407,7 @@ up in the normal.exp file. // { dg-options "-O0" { target *-*-* } }

    More examples can be found in the libstdc++-v3/testsuite/*/*.cc files. -

    Test Harness and Utilities

    Dejagnu Harness Details

    +

    Test Harness and Utilities

    Dejagnu Harness Details

    Underlying details of testing for conformance and regressions are abstracted via the GNU Dejagnu package. This is similar to the rest of GCC. @@ -435,7 +434,7 @@ callbacks loaded from the support library.

    The config directory is searched for any particular "target board" information unique to this library. This is currently unused and sets only default variables. -

    Utilities

    +

    Utilities

    The testsuite directory also contains some files that implement functionality that is intended to make writing test cases easier, @@ -447,7 +446,7 @@ only default variables. during testing.

    These files include the following functionality: -

    • +

      • testsuite_abi.h, testsuite_abi.cc, testsuite_abi_check.cc @@ -477,7 +476,7 @@ only default variables. testsuite_hooks.cc

        A large number of utilities, including: -

        • VERIFY

        • set_memory_limits

        • verify_demangle

        • run_tests_wrapped_locale

        • run_tests_wrapped_env

        • try_named_locale

        • try_mkfifo

        • func_callback

        • counter

        • copy_tracker

        • copy_constructor

        • assignment_operator

        • destructor

        • pod_char, pod_int and associated char_traits specializations

      • +

        • VERIFY

        • set_memory_limits

        • verify_demangle

        • run_tests_wrapped_locale

        • run_tests_wrapped_env

        • try_named_locale

        • try_mkfifo

        • func_callback

        • counter

        • copy_tracker

        • copy_constructor

        • assignment_operator

        • destructor

        • pod_char, pod_int and associated char_traits specializations

      • testsuite_io.h

        Error, exception, and constraint checking for @@ -491,10 +490,10 @@ only default variables.

        A number of class abstractions for performance counters, and reporting functions including: -

        • time_counter

        • resource_counter

        • report_performance

    Special Topics

    +

    • time_counter

    • resource_counter

    • report_performance

    Special Topics

    Qualifying Exception Safety Guarantees - -

    Overview

    + +

    Overview

    Testing is composed of running a particular test sequence, and looking at what happens to the surrounding code when exceptions are thrown. Each test is composed of measuring @@ -524,9 +523,9 @@ only default variables. completes without an exception being thrown, assume all potential error paths have been exercised in a sequential manner. -

    +

    Existing tests -
    • +

    • Ad Hoc

      For example, @@ -563,9 +562,9 @@ as the allocator type. instrumentation to iterator and const_iterator types that throw conditionally on iterator operations. -

    +

    C++11 Requirements Test Sequence Descriptions -
    • +

    • Basic

      Basic consistency on exception propagation tests. For @@ -636,4 +635,4 @@ C++11 Requirements Test Sequence Descriptions The general form demonstrated in testsuite/23_containers/list/requirements/exception/propagation_coherent.cc . The instantiating test object is __gnu_test::propagation_coherent and is detailed in testsuite/util/exception/safety.h. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/traits.html b/libstdc++-v3/doc/html/manual/traits.html index 6c2eaf4..ed45918 100644 --- a/libstdc++-v3/doc/html/manual/traits.html +++ b/libstdc++-v3/doc/html/manual/traits.html @@ -1,10 +1,9 @@ - -Traits

    Traits

    +
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/unordered_associative.html b/libstdc++-v3/doc/html/manual/unordered_associative.html new file mode 100644 index 0000000..5781089 --- /dev/null +++ b/libstdc++-v3/doc/html/manual/unordered_associative.html @@ -0,0 +1,64 @@ + +Unordered Associative

    Unordered Associative

    Hash Code

    Hash Code Caching Policy

    + The unordered containers in libstdc++ may cache the hash code for each + element alongside the element itself. In some cases not recalculating + the hash code every time it's needed can improve performance, but the + additional memory overhead can also reduce performance, so whether an + unordered associative container caches the hash code or not depends on + a number of factors. The caching policy for GCC 4.8 is described below. +

    + The C++ standard requires that erase and swap + operations must not throw exceptions. Those operations might need an + element's hash code, but cannot use the hash function if it could + throw. + This means the hash codes will be cached unless the hash function + has a non-throwing exception specification such as noexcept + or throw(). +

    + Secondly, libstdc++ also needs the hash code in the implementation of + local_iterator and const_local_iterator in + order to know when the iterator has reached the end of the bucket. + This means that the local iterator types will embed a copy of the hash + function when possible. + Because the local iterator types must be DefaultConstructible and + CopyAssignable, if the hash function type does not model those concepts + then it cannot be embedded and so the hash code must be cached. + Note that a hash function might not be safe to use when + default-constructed (e.g if it a function pointer) so a hash + function that is contained in a local iterator won't be used until + the iterator is valid, so the hash function has been copied from a + correctly-initialized object. +

    + If the hash function is non-throwing, DefaultConstructible and + CopyAssignable then libstdc++ doesn't need to cache the hash code for + correctness, but might still do so for performance if computing a + hash code is an expensive operation, as it may be for arbitrarily + long strings. + As an extension libstdc++ provides a trait type to describe whether + a hash function is fast. By default hash functions are assumed to be + fast unless the trait is specialized for the hash function and the + trait's value is false, in which case the hash code will always be + cached. + The trait can be specialized for user-defined hash functions like so: +

    +      #include <unordered_set>
    +
    +      struct hasher
    +      {
    +        std::size_t operator()(int val) const noexcept
    +        {
    +          // Some very slow computation of a hash code from an int !
    +          ...
    +        }
    +      }
    +
    +      namespace std
    +      {
    +        template<>
    +          struct __is_fast_hash<hasher> : std::false_type
    +          { };
    +      }
    +    
    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using.html b/libstdc++-v3/doc/html/manual/using.html index 2a0406b..984577c 100644 --- a/libstdc++-v3/doc/html/manual/using.html +++ b/libstdc++-v3/doc/html/manual/using.html @@ -1,9 +1,8 @@ - -Chapter 3. Using +

    Table 3.1. C++ Command Options

    Option FlagsDescription
    -std=c++98Use the 1998 ISO C++ standard plus amendments.
    -std=gnu++98As directly above, with GNU extensions.
    -std=c++11Use the 2011 ISO C++ standard.
    -std=gnu++11As directly above, with GNU extensions.
    -fexceptionsSee exception-free dialect
    -frttiAs above, but RTTI-free dialect.
    -pthread or -pthreadsFor ISO C++11 <thread>, <future>, + <mutex>, or <condition_variable>.
    -fopenmpFor parallel mode.

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using_concurrency.html b/libstdc++-v3/doc/html/manual/using_concurrency.html index bd62da3..509c48d 100644 --- a/libstdc++-v3/doc/html/manual/using_concurrency.html +++ b/libstdc++-v3/doc/html/manual/using_concurrency.html @@ -1,10 +1,9 @@ - -Concurrency

    Concurrency

    This section discusses issues surrounding the proper compilation +Concurrency

    Concurrency

    This section discusses issues surrounding the proper compilation of multithreaded applications which use the Standard C++ library. This information is GCC-specific since the C++ standard does not address matters of multithreaded applications. -

    Prerequisites

    All normal disclaimers aside, multithreaded C++ application are +

    Prerequisites

    All normal disclaimers aside, multithreaded C++ application are only supported when libstdc++ and all user code was built with compilers which report (via gcc/g++ -v ) the same thread model and that model is not single. As long as your @@ -32,7 +31,7 @@ -pthread is honored. Some other ports use other switches. AFAIK, none of this is properly documented anywhere other than in ``gcc -dumpspecs'' (look at lib and cpp entries). -

    Thread Safety

    +

    Thread Safety

    In the terms of the 2011 C++ standard a thread-safe program is one which does not perform any conflicting non-atomic operations on memory locations and so does not contain any data races. @@ -44,7 +43,7 @@ of the

    The library strives to be thread-safe when all of the following conditions are met: -

    • The system's libc is itself thread-safe, +

      Atomics

      -

      IO

      This gets a bit tricky. Please read carefully, and bear with me. -

      Structure

      A wrapper +

      Atomics

      +

      IO

      This gets a bit tricky. Please read carefully, and bear with me. +

      Structure

      A wrapper type called __basic_file provides our abstraction layer for the std::filebuf classes. Nearly all decisions dealing with actual input and output must be made in __basic_file. @@ -165,7 +164,7 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) but is not used in the current code. Providing locking at any higher level is akin to providing locking within containers, and is not done for the same reasons (see the links above). -

      Defaults

      The __basic_file type is simply a collection of small wrappers around +

      Defaults

      The __basic_file type is simply a collection of small wrappers around the C stdio layer (again, see the link under Structure). We do no locking ourselves, but simply pass through to calls to fopen, fwrite, and so forth. @@ -187,7 +186,7 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) contained in the stream formatting classes (e.g., setting up callbacks inside an std::ofstream), you need to guard such accesses like any other critical shared resource. -

      Future

      A +

      Future

      A second choice may be available for I/O implementations: libio. This is disabled by default, and in fact will not currently work due to other issues. It will be revisited, however. @@ -212,10 +211,10 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) version will see calls from libstdc++ directly into the glibc already installed. For other platforms, a copy of the libio subsection will be built and included in libstdc++. -

      Alternatives

      Don't forget that other cstdio implementations are possible. You could +

      Alternatives

      Don't forget that other cstdio implementations are possible. You could easily write one to perform your own forms of locking, to solve your "interesting" problems. -

      Containers

      This section discusses issues surrounding the design of +

      Containers

      This section discusses issues surrounding the design of multithreaded applications which use Standard C++ containers. All information in this section is current as of the gcc 3.0 release and all later point releases. Although earlier gcc @@ -268,4 +267,4 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) useful are details on allocator options and capabilities. -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html b/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html index c5f97d4..e367aab 100644 --- a/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html +++ b/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html @@ -1,10 +1,9 @@ - -Linking

    Linking

    Almost Nothing

    +Linking

    Linking

    Almost Nothing

    Or as close as it gets: freestanding. This is a minimal configuration, with only partial support for the standard library. Assume only the following header files can be used: -

    • +

      • cstdarg

      • cstddef @@ -22,12 +21,12 @@ typeinfo

      In addition, throw in -

      • +

        • cxxabi.h.

        In the C++11 dialect add -

        • +

          • initializer_list

          • type_traits @@ -40,7 +39,7 @@ No attempt is made to verify that only the minimal subset identified above is actually used at compile time. Violations are diagnosed as undefined symbols at link time. -

          Finding Dynamic or Shared Libraries

          +

          Finding Dynamic or Shared Libraries

          If the only library built is the static library (libstdc++.a), or if specifying static linking, this section is can be skipped. But @@ -63,7 +62,7 @@ A quick read of the relevant part of the GCC

          Methods vary for different platforms and different styles, and are printed to the screen during installation. To summarize: -

          • +

            • At runtime set LD_LIBRARY_PATH in your environment correctly, so that the shared library for libstdc++ can be found and loaded. Be certain that you @@ -75,7 +74,7 @@ A quick read of the relevant part of the GCC g++, which will in turn pass them on to the linker. The exact format of the options is dependent on which linker you use: -

              • +

                • GNU ld (default on GNU/Linux): -Wl,-rpath,destdir/lib

                • @@ -103,4 +102,4 @@ A quick read of the relevant part of the GCC also installed, for use with Libtool. If you use Libtool to create your executables, these details are taken care of for you. -

              +

          \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using_exceptions.html b/libstdc++-v3/doc/html/manual/using_exceptions.html index 9b52592..c4dafc0 100644 --- a/libstdc++-v3/doc/html/manual/using_exceptions.html +++ b/libstdc++-v3/doc/html/manual/using_exceptions.html @@ -1,6 +1,5 @@ - -Exceptions

          Exceptions

          +Exceptions

          Exceptions

          The C++ language provides language support for stack unwinding with try and catch blocks and the throw keyword. @@ -12,7 +11,7 @@ exceptional circumstances.

          Two general topics of discussion follow: exception neutrality and exception safety. -

          Exception Safety

          +

          Exception Safety

          What is exception-safe code?

          Will define this as reasonable and well-defined behavior by classes @@ -27,7 +26,7 @@ exception neutrality and exception safety. Using the layered approach from Abrahams, can classify library components as providing set levels of safety. These will be called exception guarantees, and can be divided into three categories. -

          • +

            • One. Don't throw.

              As specified in 23.2.1 general container requirements. Applicable @@ -51,7 +50,7 @@ exception neutrality and exception safety. Member functions insert of a single element, push_back, push_front, and rehash. -

          Exception Neutrality

          +

      Exception Neutrality

      Simply put, once thrown an exception object should continue in flight unless handled explicitly. In practice, this means propagating exceptions should not be swallowed in @@ -75,7 +74,7 @@ exception neutrality and exception safety. Unfortunately, this tends to be more of a guideline than a strict rule as applied to the standard library. As such, the following is a list of known problem areas where exceptions are not propagated. -

      • +

        • Input/Output

          The destructor ios_base::Init::~Init() @@ -101,7 +100,7 @@ exception neutrality and exception safety. The constructors of thread that take a callable function argument swallow all exceptions resulting from executing the function argument. -

      Doing without

      +

    Doing without

    C++ is a language that strives to be as efficient as is possible in delivering features. As such, considerable care is used by both language implementer and designers to make sure unused features @@ -220,7 +219,7 @@ exception neutrality and exception safety. substitution of the C language keyword const with the uglified doppelganger __const. -

    Compatibility

    With C

    +

    Compatibility

    With C

    C language code that is expecting to interoperate with C++ should be compiled with -fexceptions. This will make debugging a C language function called as part of C++-induced stack @@ -235,7 +234,7 @@ is called. getting these details right. For GNU systems, all appropriate parts of the GNU C library are already compiled with -fexceptions. -

    With POSIX thread cancellation

    +

    With POSIX thread cancellation

    GNU systems re-use some of the exception handling mechanisms to track control flow for POSIX thread cancellation.

    @@ -266,7 +265,7 @@ is called. } catch(...) { this->_M_setstate(ios_base::badbit); } -

    Bibliography

    +

    Bibliography

    System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) @@ -275,40 +274,40 @@ is called. . Copyright © 2008 The Open Group/The Institute of Electrical and Electronics Engineers, Inc. - .

    + .

    Error and Exception Handling . David Abrahams . Boost - .

    + .

    Exception-Safety in Generic Components . David Abrahams. Boost - .

    + .

    Standard Library Exception Policy . Matt Austern. WG21 N1077 - .

    + .

    ia64 c++ abi exception handling . Richard Henderson. GNU - .

    + .

    + . Bjarne Stroustrup.

    Exceptional C++ . Exception-Safety Issues and Techniques - . Herb Sutter.

    + . Herb Sutter.

    + .

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using_headers.html b/libstdc++-v3/doc/html/manual/using_headers.html index 771af7d..36ccec1 100644 --- a/libstdc++-v3/doc/html/manual/using_headers.html +++ b/libstdc++-v3/doc/html/manual/using_headers.html @@ -1,6 +1,5 @@ - -Headers

    Headers

    Header Files

    +Headers

    Headers

    Header Files

    The C++ standard specifies the entire set of header files that must be available to all hosted implementations. Actually, the word "files" is a misnomer, since the contents of the @@ -19,19 +18,19 @@ the 1998 standard as updated for 2003, and the current 2011 standard.

    C++98/03 include files. These are available in the default compilation mode, i.e. -std=c++98 or -std=gnu++98. -

    Table 3.2. C++ 1998 Library Headers

    algorithmbitsetcomplexdequeexception
    fstreamfunctionaliomanipiosiosfwd
    iostreamistreamiteratorlimitslist
    localemapmemorynewnumeric
    ostreamqueuesetsstreamstack
    stdexceptstreambufstringutilitytypeinfo
    valarrayvector   

    Table 3.3. C++ 1998 Library Headers for C Library Facilities

    cassertcerrnocctypecfloatciso646
    climitsclocalecmathcsetjmpcsignal
    cstdargcstddefcstdiocstdlibcstring
    ctimecwcharcwctype  

    +

    Table 3.2. C++ 1998 Library Headers

    algorithmbitsetcomplexdequeexception
    fstreamfunctionaliomanipiosiosfwd
    iostreamistreamiteratorlimitslist
    localemapmemorynewnumeric
    ostreamqueuesetsstreamstack
    stdexceptstreambufstringutilitytypeinfo
    valarrayvector   

    Table 3.3. C++ 1998 Library Headers for C Library Facilities

    cassertcerrnocctypecfloatciso646
    climitsclocalecmathcsetjmpcsignal
    cstdargcstddefcstdiocstdlibcstring
    ctimecwcharcwctype  

    C++11 include files. These are only available in C++11 compilation mode, i.e. -std=c++11 or -std=gnu++11. -

    Table 3.4. C++ 2011 Library Headers

    algorithmarraybitsetchronocomplex
    condition_variabledequeexceptionforward_listfstream
    functionalfutureinitalizer_listiomanipios
    iosfwdiostreamistreamiteratorlimits
    listlocalemapmemorymutex
    newnumericostreamqueuerandom
    ratioregexsetsstreamstack
    stdexceptstreambufstringsystem_errorthread
    tupletype_traitstypeinfounordered_mapunordered_set
    utilityvalarrayvector  

    Table 3.5. C++ 2011 Library Headers for C Library Facilities

    cassertccomplexcctypecerrnocfenv
    cfloatcinttypesciso646climitsclocale
    cmathcsetjmpcsignalcstdargcstdbool
    cstddefcstdintcstdlibcstdiocstring
    ctgmathctimecucharcwcharcwctype

    +

    Table 3.4. C++ 2011 Library Headers

    algorithmarraybitsetchronocomplex
    condition_variabledequeexceptionforward_listfstream
    functionalfutureinitalizer_listiomanipios
    iosfwdiostreamistreamiteratorlimits
    listlocalemapmemorymutex
    newnumericostreamqueuerandom
    ratioregexsetsstreamstack
    stdexceptstreambufstringsystem_errorthread
    tupletype_traitstypeinfounordered_mapunordered_set
    utilityvalarrayvector  

    Table 3.5. C++ 2011 Library Headers for C Library Facilities

    cassertccomplexcctypecerrnocfenv
    cfloatcinttypesciso646climitsclocale
    cmathcsetjmpcsignalcstdargcstdbool
    cstddefcstdintcstdlibcstdiocstring
    ctgmathctimecucharcwcharcwctype

    In addition, TR1 includes as: -

    Table 3.6. C++ TR 1 Library Headers

    tr1/arraytr1/complextr1/memorytr1/functionaltr1/random
    tr1/regextr1/tupletr1/type_traitstr1/unordered_maptr1/unordered_set
    tr1/utility    

    Table 3.7. C++ TR 1 Library Headers for C Library Facilities

    tr1/ccomplextr1/cfenvtr1/cfloattr1/cmathtr1/cinttypes
    tr1/climitstr1/cstdargtr1/cstdbooltr1/cstdinttr1/cstdio
    tr1/cstdlibtr1/ctgmathtr1/ctimetr1/cwchartr1/cwctype

    Decimal floating-point arithmetic is available if the C++ +

    Table 3.6. C++ TR 1 Library Headers

    tr1/arraytr1/complextr1/memorytr1/functionaltr1/random
    tr1/regextr1/tupletr1/type_traitstr1/unordered_maptr1/unordered_set
    tr1/utility    

    Table 3.7. C++ TR 1 Library Headers for C Library Facilities

    tr1/ccomplextr1/cfenvtr1/cfloattr1/cmathtr1/cinttypes
    tr1/climitstr1/cstdargtr1/cstdbooltr1/cstdinttr1/cstdio
    tr1/cstdlibtr1/ctgmathtr1/ctimetr1/cwchartr1/cwctype

    Decimal floating-point arithmetic is available if the C++ compiler supports scalar decimal floating-point types defined via __attribute__((mode(SD|DD|LD))). -

    Table 3.8. C++ TR 24733 Decimal Floating-Point Header

    decimal/decimal

    +

    Table 3.8. C++ TR 24733 Decimal Floating-Point Header

    decimal/decimal

    Also included are files for the C++ ABI interface: -

    Table 3.9. C++ ABI Headers

    cxxabi.hcxxabi_forced.h

    +

    Table 3.9. C++ ABI Headers

    cxxabi.hcxxabi_forced.h

    And a large variety of extensions. -

    Table 3.10. Extension Headers

    ext/algorithmext/atomicity.hext/array_allocator.hext/bitmap_allocator.hext/cast.h
    ext/codecvt_specializations.hext/concurrence.hext/debug_allocator.hext/enc_filebuf.hext/extptr_allocator.h
    ext/functionalext/iteratorext/malloc_allocator.hext/memoryext/mt_allocator.h
    ext/new_allocator.hext/numericext/numeric_traits.hext/pb_ds/assoc_container.hext/pb_ds/priority_queue.h
    ext/pod_char_traits.hext/pool_allocator.hext/rb_treeext/ropeext/slist
    ext/stdio_filebuf.hext/stdio_sync_filebuf.hext/throw_allocator.hext/typelist.hext/type_traits.h
    ext/vstring.h    

    Table 3.11. Extension Debug Headers

    debug/bitsetdebug/dequedebug/listdebug/mapdebug/set
    debug/stringdebug/unordered_mapdebug/unordered_setdebug/vector 

    Table 3.12. Extension Profile Headers

    profile/bitsetprofile/dequeprofile/listprofile/map
    profile/setprofile/unordered_mapprofile/unordered_setprofile/vector

    Table 3.13. Extension Parallel Headers

    parallel/algorithmparallel/numeric

    Mixing Headers

    A few simple rules. +

    Table 3.10. Extension Headers

    ext/algorithmext/atomicity.hext/array_allocator.hext/bitmap_allocator.hext/cast.h
    ext/codecvt_specializations.hext/concurrence.hext/debug_allocator.hext/enc_filebuf.hext/extptr_allocator.h
    ext/functionalext/iteratorext/malloc_allocator.hext/memoryext/mt_allocator.h
    ext/new_allocator.hext/numericext/numeric_traits.hext/pb_ds/assoc_container.hext/pb_ds/priority_queue.h
    ext/pod_char_traits.hext/pool_allocator.hext/rb_treeext/ropeext/slist
    ext/stdio_filebuf.hext/stdio_sync_filebuf.hext/throw_allocator.hext/typelist.hext/type_traits.h
    ext/vstring.h    

    Table 3.11. Extension Debug Headers

    debug/bitsetdebug/dequedebug/listdebug/mapdebug/set
    debug/stringdebug/unordered_mapdebug/unordered_setdebug/vector 

    Table 3.12. Extension Profile Headers

    profile/bitsetprofile/dequeprofile/listprofile/map
    profile/setprofile/unordered_mapprofile/unordered_setprofile/vector

    Table 3.13. Extension Parallel Headers

    parallel/algorithmparallel/numeric

    Mixing Headers

    A few simple rules.

    First, mixing different dialects of the standard headers is not possible. It's an all-or-nothing affair. Thus, code like

    @@ -54,7 +53,7 @@ same translation unit:
     #include <tr1/type_traits>
     #include <type_traits>
     

    Several parts of C++11 diverge quite substantially from TR1 predecessors. -

    The C Headers and namespace std

    +

    The C Headers and namespace std

    The standard specifies that if one includes the C-style header (<math.h> in this case), the symbols will be available in the global namespace and perhaps in @@ -73,10 +72,10 @@ floating-point types. This means that std::sin can be used uniformly, instead of a combination of std::sinf, std::sin, and std::sinl. -

    Precompiled Headers

    There are three base header files that are provided. They can be +

    Precompiled Headers

    There are three base header files that are provided. They can be used to precompile the standard headers and extensions into binary files that may the be used to speed compiles that use these headers. -

    • stdc++.h

      Includes all standard headers. Actual content varies depending on +

      • stdc++.h

        Includes all standard headers. Actual content varies depending on language dialect.

      • stdtr1c++.h

        Includes all of <stdc++.h>, and adds all the TR1 headers.

      • extc++.h

        Includes all of <stdtr1c++.h>, and adds all the Extension headers. @@ -99,5 +98,5 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe ! ./stdc++.h.gch . /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0/iostream . /mnt/share/bld/H-x86-gcc.20071201include/c++/4.3.0/string -

        The exclamation point to the left of the stdc++.h.gch listing means that the generated PCH file was used, and thus the

        Detailed information about creating precompiled header files can be found in the GCC documentation. -

    +

    The exclamation point to the left of the stdc++.h.gch listing means that the generated PCH file was used.

    Detailed information about creating precompiled header files can be found in the GCC documentation. +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html index a7338a9..add6d69 100644 --- a/libstdc++-v3/doc/html/manual/using_macros.html +++ b/libstdc++-v3/doc/html/manual/using_macros.html @@ -1,6 +1,5 @@ - -Macros

    Macros

    +Macros

    Macros

    All library macros begin with _GLIBCXX_.

    Furthermore, all pre-processor macros, switches, and @@ -18,7 +17,7 @@ those macros listed below are offered for consideration by the general public.

    Below is the macro which users may check for library version - information.

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using_namespaces.html b/libstdc++-v3/doc/html/manual/using_namespaces.html index 8a2c1be..48b8e7d 100644 --- a/libstdc++-v3/doc/html/manual/using_namespaces.html +++ b/libstdc++-v3/doc/html/manual/using_namespaces.html @@ -1,7 +1,6 @@ - -Namespaces

    Namespaces

    Available Namespaces

    There are three main namespaces. -

    • std

      The ISO C++ standards specify that "all library entities are defined +Namespaces

      Namespaces

      Available Namespaces

      There are three main namespaces. +

      • std

        The ISO C++ standards specify that "all library entities are defined within namespace std." This includes namespaces nested within namespace std, such as namespace std::tr1. @@ -12,11 +11,11 @@ but necessary for interoperability. include __gnu_cxx, __gnu_debug, __gnu_parallel, and __gnu_pbds.

      A complete list of implementation namespaces (including namespace contents) is available in the generated source documentation. -

      namespace std

      +

      namespace std

      One standard requirement is that the library components are defined in namespace std::. Thus, in order to use these types or functions, one must do one of two things: -

      • put a kind of using-declaration in your source +

        • put a kind of using-declaration in your source (either using namespace std; or i.e. using std::string;) This approach works well for individual source files, but should not be used in a global context, like header files. @@ -25,7 +24,7 @@ qualified name for each library symbol (i.e. std::string, std::cout) Always can be used, and usually enhanced, by strategic use of typedefs. (In the cases where the qualified verbiage becomes unwieldy.) -

      Using Namespace Composition

      +

    Using Namespace Composition

    Best practice in programming suggests sequestering new data or functionality in a sanely-named, unique namespace whenever possible. This is considered an advantage over dumping everything in @@ -58,4 +57,4 @@ namespace gtk std::string; (depending on whether the system has libstdc++ in std:: or not). (ideas from Llewelly and Karl Nelson) -

    +

    \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/utilities.html b/libstdc++-v3/doc/html/manual/utilities.html index e27b7cd..ac52453 100644 --- a/libstdc++-v3/doc/html/manual/utilities.html +++ b/libstdc++-v3/doc/html/manual/utilities.html @@ -1,17 +1,16 @@ - -Chapter 6.  Utilities

    Functors

    If you don't know what functors are, you're not alone. Many people get slightly the wrong idea. In the interest of not reinventing the wheel, we will refer you to the introduction to the functor concept written by SGI as part of their STL, in their http://www.sgi.com/tech/stl/functors.html. -

    +

    \ No newline at end of file -- 2.7.4