mirror of git://gcc.gnu.org/git/gcc.git
*: Regenerate.
2011-02-08 Benjamin Kosnik <bkoz@redhat.com> * doc/html/*: Regenerate. From-SVN: r169960
This commit is contained in:
parent
91140cd3cf
commit
df2c31eed7
|
|
@ -13,6 +13,8 @@
|
||||||
* doc/xml/manual/build_hacking.xml: Use absolute paths for images.
|
* doc/xml/manual/build_hacking.xml: Use absolute paths for images.
|
||||||
* doc/xml/images/confdeps.pdf: Add.
|
* doc/xml/images/confdeps.pdf: Add.
|
||||||
|
|
||||||
|
* doc/html/*: Regenerate.
|
||||||
|
|
||||||
2011-02-08 Jonathan Wakely <jwakely.gcc@gmail.com>
|
2011-02-08 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||||
|
|
||||||
* doc/xml/gnu/fdl-1.2.xml: Remove.
|
* doc/xml/gnu/fdl-1.2.xml: Remove.
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article" title="API Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="api"></a>API Documentation</h2></div><div><p class="copyright">Copyright ©
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="up" href="bk02.html" title=""/><link rel="prev" href="bk02.html" title=""/><link rel="next" href="bk03.html" title=""/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"/><td align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr/></div><div class="article" title="The GNU C++ Library API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="api"/>The GNU C++ Library API Reference</h2></div><div><p class="copyright">Copyright ©
|
||||||
2008
|
2008
|
||||||
,
|
,
|
||||||
2010
|
2010
|
||||||
|
|
||||||
<a class="ulink" href="http://www.fsf.org/" target="_top">FSF
|
<a class="link" href="http://www.fsf.org/">FSF
|
||||||
</a>
|
</a>
|
||||||
</p></div><div><div class="legalnotice" title="Legal Notice"><a id="id343928"></a><p>
|
</p></div><div><div class="legalnotice" title="Legal Notice"><a id="id386452"/><p>
|
||||||
<a class="link" href="manual/license.html" title="License">License
|
<a class="link" href="manual/license.html" title="License">License
|
||||||
</a>
|
</a>
|
||||||
</p></div></div></div><hr /></div><p>
|
</p></div></div></div><hr/></div><p>
|
||||||
The GNU C++ library sources have been specially formatted so that
|
The GNU C++ library sources have been specially formatted so that
|
||||||
with the proper invocation of another tool (Doxygen), a set of
|
with the proper invocation of another tool (Doxygen), a set of
|
||||||
indexed reference material can generated from the sources files
|
indexed reference material can generated from the sources files
|
||||||
|
|
@ -20,23 +20,26 @@
|
||||||
particular include file, looking at inheritance diagrams, etc.
|
particular include file, looking at inheritance diagrams, etc.
|
||||||
</p><p>
|
</p><p>
|
||||||
The API documentation, rendered into HTML, can be viewed online:
|
The API documentation, rendered into HTML, can be viewed online:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html">for the 3.4 release
|
||||||
</a>
|
</a>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/index.html" target="_top">for the 4.1 release
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/index.html">for the 4.1 release
|
||||||
</a>
|
</a>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/index.html" target="_top">for the 4.2 release
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/index.html">for the 4.2 release
|
||||||
</a>
|
</a>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/index.html" target="_top">for the 4.3 release
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/index.html">for the 4.3 release
|
||||||
</a>
|
</a>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/index.html" target="_top">for the 4.4 release
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/index.html">for the 4.4 release
|
||||||
</a>
|
</a>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">"the latest collection"
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.5/index.html">for the 4.5 release
|
||||||
|
</a>
|
||||||
|
</p></li><li class="listitem"><p>
|
||||||
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">"the latest collection"
|
||||||
</a>
|
</a>
|
||||||
(For the main development tree; see the date on the first page.)
|
(For the main development tree; see the date on the first page.)
|
||||||
</p></li></ul></div><p>
|
</p></li></ul></div><p>
|
||||||
|
|
@ -44,10 +47,10 @@
|
||||||
gcc.org site in a directory located at
|
gcc.org site in a directory located at
|
||||||
<code class="literal"><URL:ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/></code>.
|
<code class="literal"><URL:ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/></code>.
|
||||||
You will almost certainly need to use one of the
|
You will almost certainly need to use one of the
|
||||||
<a class="ulink" href="http://gcc.gnu.org/mirrors.html" target="_top">mirror sites</a> to download
|
<a class="link" href="http://gcc.gnu.org/mirrors.html">mirror sites</a> to download
|
||||||
the tarball. After unpacking, simply load libstdc++-html-*/index.html
|
the tarball. After unpacking, simply load libstdc++-html-*/index.html
|
||||||
into a browser.
|
into a browser.
|
||||||
</p><p>
|
</p><p>
|
||||||
In addition, a rendered set of man pages are available in the same
|
In addition, a rendered set of man pages are available in the same
|
||||||
location specified above. Start with C++Intro(3).
|
location specified above. Start with C++Intro(3).
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk02.html">Up</a></td><td align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td align="left" valign="top"> </td><td align="center"><a accesskey="h" href="spine.html">Home</a></td><td align="right" valign="top"> </td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="API Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="article"><a href="api.html">API Documentation</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> API Documentation</td></tr></table></div></body></html>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title/><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library"/><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility"/><link rel="next" href="api.html" title="The GNU C++ Library API Reference"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"/></tr><tr><td align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr/></div><div class="book"><div class="titlepage"><hr/></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td align="center"> </td><td align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td align="left" valign="top">Backwards Compatibility </td><td align="center"><a accesskey="h" href="spine.html">Home</a></td><td align="right" valign="top"> The GNU C++ Library API Reference</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="prev" href="api.html" title="API Documentation" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API Documentation </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title/><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library"/><link rel="prev" href="api.html" title="The GNU C++ Library API Reference"/><link rel="next" href="faq.html" title="Frequently Asked Questions"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"/></tr><tr><td align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr/></div><div class="book"><div class="titlepage"><hr/></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="api.html">Prev</a> </td><td align="center"> </td><td align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td align="left" valign="top">The GNU C++ Library API Reference </td><td align="center"><a accesskey="h" href="spine.html">Home</a></td><td align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article" title="Frequently Asked Questions"><div class="titlepage"><div><div><h2 class="title"><a id="faq"></a>Frequently Asked Questions</h2></div><div><p class="copyright">Copyright ©
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="spine.html" title="The GNU C++ Library"/><link rel="up" href="bk03.html" title=""/><link rel="prev" href="bk03.html" title=""/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"/><td align="right"> </td></tr></table><hr/></div><div class="article" title="Frequently Asked Questions"><div class="titlepage"><div><div><h1 class="title"><a id="faq"/>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
|
||||||
2008
|
2008, 2010
|
||||||
|
|
||||||
<a class="ulink" href="http://www.fsf.org" target="_top">FSF</a>
|
<a class="link" href="http://www.fsf.org">FSF</a>
|
||||||
</p></div></div><hr /></div><div class="qandaset" title="Frequently Asked Questions"><a id="id460433"></a><dl><dt>1. <a href="faq.html#faq.info">General Information</a></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
|
</p></div></div><hr/></div><div class="qandaset" title="Frequently Asked Questions"><a id="id396973"/><dl><dt/><dd><dl><dt>1.1. <a href="faq.html#faq.what">
|
||||||
What is libstdc++?
|
What is libstdc++?
|
||||||
</a></dt><dt>1.2. <a href="faq.html#faq.why">
|
</a></dt><dt>1.2. <a href="faq.html#faq.why">
|
||||||
Why should I use libstdc++?
|
Why should I use libstdc++?
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
What happened to the older libg++? I need that!
|
What happened to the older libg++? I need that!
|
||||||
</a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
|
</a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
|
||||||
What if I have more questions?
|
What if I have more questions?
|
||||||
</a></dt></dl></dd><dt>2. <a href="faq.html#faq.license">License</a></dt><dd><dl><dt>2.1. <a href="faq.html#faq.license.what">
|
</a></dt></dl></dd><dt/><dd><dl><dt>2.1. <a href="faq.html#faq.license.what">
|
||||||
What are the license terms for libstdc++?
|
What are the license terms for libstdc++?
|
||||||
</a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
|
</a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
|
||||||
So any program which uses libstdc++ falls under the GPL?
|
So any program which uses libstdc++ falls under the GPL?
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
How is that different from the GNU {Lesser,Library} GPL?
|
How is that different from the GNU {Lesser,Library} GPL?
|
||||||
</a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
|
</a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
|
||||||
I see. So, what restrictions are there on programs that use the library?
|
I see. So, what restrictions are there on programs that use the library?
|
||||||
</a></dt></dl></dd><dt>3. <a href="faq.html#faq.installation">Installation</a></dt><dd><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
|
</a></dt></dl></dd><dt/><dd><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
|
||||||
</a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
|
</a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
|
||||||
</a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
|
</a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
|
||||||
</a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
|
</a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
What's libsupc++?
|
What's libsupc++?
|
||||||
</a></dt><dt>3.6. <a href="faq.html#faq.size">
|
</a></dt><dt>3.6. <a href="faq.html#faq.size">
|
||||||
This library is HUGE!
|
This library is HUGE!
|
||||||
</a></dt></dl></dd><dt>4. <a href="faq.html#faq.platform-specific">Platform-Specific Issues</a></dt><dd><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
|
</a></dt></dl></dd><dt/><dd><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
|
||||||
Can libstdc++ be used with non-GNU compilers?
|
Can libstdc++ be used with non-GNU compilers?
|
||||||
</a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
|
</a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
|
||||||
No 'long long' type on Solaris?
|
No 'long long' type on Solaris?
|
||||||
|
|
@ -50,13 +50,13 @@
|
||||||
Recent GNU/Linux glibc required?
|
Recent GNU/Linux glibc required?
|
||||||
</a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
|
</a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
|
||||||
Can't use wchar_t/wstring on FreeBSD
|
Can't use wchar_t/wstring on FreeBSD
|
||||||
</a></dt></dl></dd><dt>5. <a href="faq.html#faq.known_bugs">Known Bugs</a></dt><dd><dl><dt>5.1. <a href="faq.html#faq.what_works">
|
</a></dt></dl></dd><dt/><dd><dl><dt>5.1. <a href="faq.html#faq.what_works">
|
||||||
What works already?
|
What works already?
|
||||||
</a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
|
</a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
|
||||||
Bugs in the ISO C++ language or library specification
|
Bugs in the ISO C++ language or library specification
|
||||||
</a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
|
</a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
|
||||||
Bugs in the compiler (gcc/g++) and not libstdc++
|
Bugs in the compiler (gcc/g++) and not libstdc++
|
||||||
</a></dt></dl></dd><dt>6. <a href="faq.html#faq.known_non-bugs">Known Non-Bugs</a></dt><dd><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
|
</a></dt></dl></dd><dt/><dd><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
|
||||||
Reopening a stream fails
|
Reopening a stream fails
|
||||||
</a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
|
</a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
|
||||||
-Weffc++ complains too much
|
-Weffc++ complains too much
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
list::size() is O(n)!
|
list::size() is O(n)!
|
||||||
</a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
|
</a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
|
||||||
Aw, that's easy to fix!
|
Aw, that's easy to fix!
|
||||||
</a></dt></dl></dd><dt>7. <a href="faq.html#faq.misc">Miscellaneous</a></dt><dd><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
|
</a></dt></dl></dd><dt/><dd><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
|
||||||
string::iterator is not char*; vector<T>::iterator is not T*
|
string::iterator is not char*; vector<T>::iterator is not T*
|
||||||
</a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
|
</a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
|
||||||
What's next after libstdc++?
|
What's next after libstdc++?
|
||||||
|
|
@ -91,7 +91,7 @@
|
||||||
What's an ABI and why is it so messy?
|
What's an ABI and why is it so messy?
|
||||||
</a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
|
</a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
|
||||||
How do I make std::vector<T>::capacity() == std::vector<T>::size?
|
How do I make std::vector<T>::capacity() == std::vector<T>::size?
|
||||||
</a></dt></dl></dd></dl><table border="0" width="100%" summary="Q and A Set"><col align="left" width="1%" /><col /><tbody><tr class="qandadiv"><td align="left" valign="top" colspan="2"><h3 class="title"><a id="faq.info"></a>1. General Information</h3></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
|
</a></dt></dl></dd></dl><table border="0" width="100%" summary="Q and A Set"><col align="left" width="1%"/><col/><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
|
||||||
What is libstdc++?
|
What is libstdc++?
|
||||||
</a></dt><dt>1.2. <a href="faq.html#faq.why">
|
</a></dt><dt>1.2. <a href="faq.html#faq.why">
|
||||||
Why should I use libstdc++?
|
Why should I use libstdc++?
|
||||||
|
|
@ -105,19 +105,19 @@
|
||||||
What happened to the older libg++? I need that!
|
What happened to the older libg++? I need that!
|
||||||
</a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
|
</a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
|
||||||
What if I have more questions?
|
What if I have more questions?
|
||||||
</a></dt></dl></td></tr><tr class="question" title="1.1."><td align="left" valign="top"><a id="faq.what"></a><a id="faq.what.q"></a><p><b>1.1.</b></p></td><td align="left" valign="top"><p>
|
</a></dt></dl></td></tr><tr class="question" title="1.1."><td align="left" valign="top"><a id="faq.what"/><a id="faq.what.q"/><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What is libstdc++?
|
What is libstdc++?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.what.a"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.what.a"/></td><td align="left" valign="top"><p>
|
||||||
The GNU Standard C++ Library v3 is an ongoing project to
|
The GNU Standard C++ Library v3 is an ongoing project to
|
||||||
implement the ISO 14882 Standard C++ library as described in
|
implement the ISO 14882 Standard C++ library as described in
|
||||||
chapters 17 through 27 and annex D. For those who want to see
|
chapters 17 through 27 and annex D. For those who want to see
|
||||||
exactly how far the project has come, or just want the latest
|
exactly how far the project has come, or just want the latest
|
||||||
bleeding-edge code, the up-to-date source is available over
|
bleeding-edge code, the up-to-date source is available over
|
||||||
anonymous SVN, and can even be browsed over
|
anonymous SVN, and can even be browsed over
|
||||||
the <a class="ulink" href="http://gcc.gnu.org/svn.html" target="_top">web</a>.
|
the <a class="link" href="http://gcc.gnu.org/svn.html">web</a>.
|
||||||
</p></td></tr><tr class="question" title="1.2."><td align="left" valign="top"><a id="faq.why"></a><a id="q-why"></a><p><b>1.2.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="1.2."><td align="left" valign="top"><a id="faq.why"/><a id="q-why"/><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Why should I use libstdc++?
|
Why should I use libstdc++?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-why"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-why"/></td><td align="left" valign="top"><p>
|
||||||
The completion of the ISO C++ standardization gave the C++
|
The completion of the ISO C++ standardization gave the C++
|
||||||
community a powerful set of reuseable tools in the form of the C++
|
community a powerful set of reuseable tools in the form of the C++
|
||||||
Standard Library. However, all existing C++ implementations are
|
Standard Library. However, all existing C++ implementations are
|
||||||
|
|
@ -129,9 +129,9 @@
|
||||||
(<span class="command"><strong>gcc</strong></span>, <span class="command"><strong>g++</strong></span>, etc) is widely
|
(<span class="command"><strong>gcc</strong></span>, <span class="command"><strong>g++</strong></span>, etc) is widely
|
||||||
considered to be one of the leading compilers in the world. Its
|
considered to be one of the leading compilers in the world. Its
|
||||||
development is overseen by the
|
development is overseen by the
|
||||||
<a class="ulink" href="http://gcc.gnu.org/" target="_top">GCC team</a>. All of
|
<a class="link" href="http://gcc.gnu.org/">GCC team</a>. All of
|
||||||
the rapid development and near-legendary
|
the rapid development and near-legendary
|
||||||
<a class="ulink" href="http://gcc.gnu.org/buildstat.html" target="_top">portability</a>
|
<a class="link" href="http://gcc.gnu.org/buildstat.html">portability</a>
|
||||||
that are the hallmarks of an open-source project are being
|
that are the hallmarks of an open-source project are being
|
||||||
applied to libstdc++.
|
applied to libstdc++.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -141,9 +141,9 @@
|
||||||
<code class="classname">vector<></code>, iostreams, and algorithms.)
|
<code class="classname">vector<></code>, iostreams, and algorithms.)
|
||||||
Programmers will no longer need to <span class="quote">“<span class="quote">roll their own</span>”</span>
|
Programmers will no longer need to <span class="quote">“<span class="quote">roll their own</span>”</span>
|
||||||
nor be worried about platform-specific incompatibilities.
|
nor be worried about platform-specific incompatibilities.
|
||||||
</p></td></tr><tr class="question" title="1.3."><td align="left" valign="top"><a id="faq.who"></a><a id="q-who"></a><p><b>1.3.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="1.3."><td align="left" valign="top"><a id="faq.who"/><a id="q-who"/><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Who's in charge of it?
|
Who's in charge of it?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-who"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-who"/></td><td align="left" valign="top"><p>
|
||||||
The libstdc++ project is contributed to by several developers
|
The libstdc++ project is contributed to by several developers
|
||||||
all over the world, in the same way as GCC or Linux.
|
all over the world, in the same way as GCC or Linux.
|
||||||
Benjamin Kosnik, Gabriel Dos Reis, Phil Edwards, Ulrich Drepper,
|
Benjamin Kosnik, Gabriel Dos Reis, Phil Edwards, Ulrich Drepper,
|
||||||
|
|
@ -153,17 +153,17 @@
|
||||||
Development and discussion is held on the libstdc++ mailing
|
Development and discussion is held on the libstdc++ mailing
|
||||||
list. Subscribing to the list, or searching the list
|
list. Subscribing to the list, or searching the list
|
||||||
archives, is open to everyone. You can read instructions for
|
archives, is open to everyone. You can read instructions for
|
||||||
doing so on the <a class="ulink" href="http://gcc.gnu.org/libstdc++/" target="_top">homepage</a>.
|
doing so on the <a class="link" href="http://gcc.gnu.org/libstdc++/">homepage</a>.
|
||||||
If you have questions, ideas, code, or are just curious, sign up!
|
If you have questions, ideas, code, or are just curious, sign up!
|
||||||
</p></td></tr><tr class="question" title="1.4."><td align="left" valign="top"><a id="faq.when"></a><a id="q-when"></a><p><b>1.4.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="1.4."><td align="left" valign="top"><a id="faq.when"/><a id="q-when"/><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
|
||||||
When is libstdc++ going to be finished?
|
When is libstdc++ going to be finished?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-when"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-when"/></td><td align="left" valign="top"><p>
|
||||||
Nathan Myers gave the best of all possible answers, responding to
|
Nathan Myers gave the best of all possible answers, responding to
|
||||||
a Usenet article asking this question: <span class="emphasis"><em>Sooner, if you
|
a Usenet article asking this question: <span class="emphasis"><em>Sooner, if you
|
||||||
help.</em></span>
|
help.</em></span>
|
||||||
</p></td></tr><tr class="question" title="1.5."><td align="left" valign="top"><a id="faq.how"></a><a id="q-how"></a><p><b>1.5.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="1.5."><td align="left" valign="top"><a id="faq.how"/><a id="q-how"/><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
|
||||||
How do I contribute to the effort?
|
How do I contribute to the effort?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how"/></td><td align="left" valign="top"><p>
|
||||||
Here is <a class="link" href="manual/appendix_contributing.html" title="Appendix A. Contributing">a page devoted to
|
Here is <a class="link" href="manual/appendix_contributing.html" title="Appendix A. Contributing">a page devoted to
|
||||||
this topic</a>. Subscribing to the mailing list (see above, or
|
this topic</a>. Subscribing to the mailing list (see above, or
|
||||||
the homepage) is a very good idea if you have something to
|
the homepage) is a very good idea if you have something to
|
||||||
|
|
@ -172,17 +172,17 @@
|
||||||
anybody who is willing to help write documentation, for example,
|
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
|
or has found a bug in code that we all thought was working and is
|
||||||
willing to provide details, is more than welcome!
|
willing to provide details, is more than welcome!
|
||||||
</p></td></tr><tr class="question" title="1.6."><td align="left" valign="top"><a id="faq.whereis_old"></a><a id="q-whereis_old"></a><p><b>1.6.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="1.6."><td align="left" valign="top"><a id="faq.whereis_old"/><a id="q-whereis_old"/><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What happened to the older libg++? I need that!
|
What happened to the older libg++? I need that!
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-whereis_old"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-whereis_old"/></td><td align="left" valign="top"><p>
|
||||||
The most recent libg++ README states that libg++ is no longer
|
The most recent libg++ README states that libg++ is no longer
|
||||||
being actively maintained. It should not be used for new
|
being actively maintained. It should not be used for new
|
||||||
projects, and is only being kicked along to support older code.
|
projects, and is only being kicked along to support older code.
|
||||||
</p><p>
|
</p><p>
|
||||||
More information in the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">backwards compatibility documentation</a>
|
More information in the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">backwards compatibility documentation</a>
|
||||||
</p></td></tr><tr class="question" title="1.7."><td align="left" valign="top"><a id="faq.more_questions"></a><a id="q-more_questions"></a><p><b>1.7.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="1.7."><td align="left" valign="top"><a id="faq.more_questions"/><a id="q-more_questions"/><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What if I have more questions?
|
What if I have more questions?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-more_questions"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-more_questions"/></td><td align="left" valign="top"><p>
|
||||||
If you have read the README file, and your question remains
|
If you have read the README file, and your question remains
|
||||||
unanswered, then just ask the mailing list. At present, you do not
|
unanswered, then just ask the mailing list. At present, you do not
|
||||||
need to be subscribed to the list to send a message to it. More
|
need to be subscribed to the list to send a message to it. More
|
||||||
|
|
@ -193,7 +193,7 @@
|
||||||
If you have a question that you think should be included
|
If you have a question that you think should be included
|
||||||
here, or if you have a question <span class="emphasis"><em>about</em></span> a question/answer
|
here, or if you have a question <span class="emphasis"><em>about</em></span> a question/answer
|
||||||
here, please send email to the libstdc++ mailing list, as above.
|
here, please send email to the libstdc++ mailing list, as above.
|
||||||
</p></td></tr><tr class="qandadiv"><td align="left" valign="top" colspan="2"><h3 class="title"><a id="faq.license"></a>2. License</h3></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>2.1. <a href="faq.html#faq.license.what">
|
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>2.1. <a href="faq.html#faq.license.what">
|
||||||
What are the license terms for libstdc++?
|
What are the license terms for libstdc++?
|
||||||
</a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
|
</a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
|
||||||
So any program which uses libstdc++ falls under the GPL?
|
So any program which uses libstdc++ falls under the GPL?
|
||||||
|
|
@ -201,19 +201,19 @@
|
||||||
How is that different from the GNU {Lesser,Library} GPL?
|
How is that different from the GNU {Lesser,Library} GPL?
|
||||||
</a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
|
</a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
|
||||||
I see. So, what restrictions are there on programs that use the library?
|
I see. So, what restrictions are there on programs that use the library?
|
||||||
</a></dt></dl></td></tr><tr class="question" title="2.1."><td align="left" valign="top"><a id="faq.license.what"></a><a id="q-license.what"></a><p><b>2.1.</b></p></td><td align="left" valign="top"><p>
|
</a></dt></dl></td></tr><tr class="question" title="2.1."><td align="left" valign="top"><a id="faq.license.what"/><a id="q-license.what"/><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What are the license terms for libstdc++?
|
What are the license terms for libstdc++?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what"/></td><td align="left" valign="top"><p>
|
||||||
See <a class="link" href="manual/license.html" title="License">our license description</a>
|
See <a class="link" href="manual/license.html" title="License">our license description</a>
|
||||||
for these and related questions.
|
for these and related questions.
|
||||||
</p></td></tr><tr class="question" title="2.2."><td align="left" valign="top"><a id="faq.license.any_program"></a><a id="q-license.any_program"></a><p><b>2.2.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="2.2."><td align="left" valign="top"><a id="faq.license.any_program"/><a id="q-license.any_program"/><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
|
||||||
So any program which uses libstdc++ falls under the GPL?
|
So any program which uses libstdc++ falls under the GPL?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.any_program"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.any_program"/></td><td align="left" valign="top"><p>
|
||||||
No. The special exception permits use of the library in
|
No. The special exception permits use of the library in
|
||||||
proprietary applications.
|
proprietary applications.
|
||||||
</p></td></tr><tr class="question" title="2.3."><td align="left" valign="top"><a id="faq.license.lgpl"></a><a id="q-license.lgpl"></a><p><b>2.3.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="2.3."><td align="left" valign="top"><a id="faq.license.lgpl"/><a id="q-license.lgpl"/><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
|
||||||
How is that different from the GNU {Lesser,Library} GPL?
|
How is that different from the GNU {Lesser,Library} GPL?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.lgpl"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.lgpl"/></td><td align="left" valign="top"><p>
|
||||||
The LGPL requires that users be able to replace the LGPL code with a
|
The LGPL requires that users be able to replace the LGPL code with a
|
||||||
modified version; this is trivial if the library in question is a C
|
modified version; this is trivial if the library in question is a C
|
||||||
shared library. But there's no way to make that work with C++, where
|
shared library. But there's no way to make that work with C++, where
|
||||||
|
|
@ -221,12 +221,12 @@
|
||||||
are expanded inside the code that uses the library. So to allow people
|
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
|
to replace the library code, someone using the library would have to
|
||||||
distribute their own source, rendering the LGPL equivalent to the GPL.
|
distribute their own source, rendering the LGPL equivalent to the GPL.
|
||||||
</p></td></tr><tr class="question" title="2.4."><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><b>2.4.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="2.4."><td align="left" valign="top"><a id="faq.license.what_restrictions"/><a id="q-license.what_restrictions"/><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
|
||||||
I see. So, what restrictions are there on programs that use the library?
|
I see. So, what restrictions are there on programs that use the library?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"/></td><td align="left" valign="top"><p>
|
||||||
None. We encourage such programs to be released as open source,
|
None. We encourage such programs to be released as open source,
|
||||||
but we won't punish you or sue you if you choose otherwise.
|
but we won't punish you or sue you if you choose otherwise.
|
||||||
</p></td></tr><tr class="qandadiv"><td align="left" valign="top" colspan="2"><h3 class="title"><a id="faq.installation"></a>3. Installation</h3></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
|
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
|
||||||
</a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
|
</a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
|
||||||
</a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
|
</a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
|
||||||
</a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
|
</a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
|
||||||
|
|
@ -234,8 +234,8 @@
|
||||||
What's libsupc++?
|
What's libsupc++?
|
||||||
</a></dt><dt>3.6. <a href="faq.html#faq.size">
|
</a></dt><dt>3.6. <a href="faq.html#faq.size">
|
||||||
This library is HUGE!
|
This library is HUGE!
|
||||||
</a></dt></dl></td></tr><tr class="question" title="3.1."><td align="left" valign="top"><a id="faq.how_to_install"></a><a id="q-how_to_install"></a><p><b>3.1.</b></p></td><td align="left" valign="top"><p>How do I install libstdc++?
|
</a></dt></dl></td></tr><tr class="question" title="3.1."><td align="left" valign="top"><a id="faq.how_to_install"/><a id="q-how_to_install"/><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_install"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_install"/></td><td align="left" valign="top"><p>
|
||||||
Often libstdc++ comes pre-installed as an integral part of many
|
Often libstdc++ comes pre-installed as an integral part of many
|
||||||
existing Linux and Unix systems, as well as many embedded
|
existing Linux and Unix systems, as well as many embedded
|
||||||
development tools. It may be necessary to install extra
|
development tools. It may be necessary to install extra
|
||||||
|
|
@ -247,11 +247,11 @@
|
||||||
documentation</a> for detailed
|
documentation</a> for detailed
|
||||||
instructions. You may wish to browse those files ahead
|
instructions. You may wish to browse those files ahead
|
||||||
of time to get a feel for what's required.
|
of time to get a feel for what's required.
|
||||||
</p></td></tr><tr class="question" title="3.2."><td align="left" valign="top"><a id="faq.how_to_get_sources"></a><a id="q-how_to_get_sources"></a><p><b>3.2.</b></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
|
</p></td></tr><tr class="question" title="3.2."><td align="left" valign="top"><a id="faq.how_to_get_sources"/><a id="q-how_to_get_sources"/><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_get_sources"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_get_sources"/></td><td align="left" valign="top"><p>
|
||||||
Libstdc++ sources for all official releases can be obtained as
|
Libstdc++ sources for all official releases can be obtained as
|
||||||
part of the GCC sources, available from various sites and
|
part of the GCC sources, available from various sites and
|
||||||
mirrors. A full <a class="ulink" href="http://gcc.gnu.org/mirrors.html" target="_top">list of
|
mirrors. A full <a class="link" href="http://gcc.gnu.org/mirrors.html">list of
|
||||||
download sites</a> is provided on the main GCC site.
|
download sites</a> is provided on the main GCC site.
|
||||||
</p><p>
|
</p><p>
|
||||||
Current libstdc++ sources can always be checked out of the main
|
Current libstdc++ sources can always be checked out of the main
|
||||||
|
|
@ -262,7 +262,7 @@
|
||||||
<span class="application">Subversion</span>, or <acronym class="acronym">SVN</acronym>, is
|
<span class="application">Subversion</span>, or <acronym class="acronym">SVN</acronym>, is
|
||||||
one of several revision control packages. It was selected for GNU
|
one of several revision control packages. It was selected for GNU
|
||||||
projects because it's free (speech), free (beer), and very high
|
projects because it's free (speech), free (beer), and very high
|
||||||
quality. The <a class="ulink" href="http://subversion.tigris.org" target="_top"> Subversion
|
quality. The <a class="link" href="http://subversion.tigris.org"> Subversion
|
||||||
home page</a> has a better description.
|
home page</a> has a better description.
|
||||||
</p><p>
|
</p><p>
|
||||||
The <span class="quote">“<span class="quote">anonymous client checkout</span>”</span> feature of SVN is
|
The <span class="quote">“<span class="quote">anonymous client checkout</span>”</span> feature of SVN is
|
||||||
|
|
@ -270,21 +270,21 @@
|
||||||
the latest libstdc++ sources.
|
the latest libstdc++ sources.
|
||||||
</p><p>
|
</p><p>
|
||||||
For more information
|
For more information
|
||||||
see <a class="ulink" href="http://gcc.gnu.org/svn.html" target="_top"><acronym class="acronym">SVN</acronym>
|
see <a class="link" href="http://gcc.gnu.org/svn.html"><acronym class="acronym">SVN</acronym>
|
||||||
details</a>.
|
details</a>.
|
||||||
</p></td></tr><tr class="question" title="3.3."><td align="left" valign="top"><a id="faq.how_to_test"></a><a id="q-how_to_test"></a><p><b>3.3.</b></p></td><td align="left" valign="top"><p>How do I know if it works?
|
</p></td></tr><tr class="question" title="3.3."><td align="left" valign="top"><a id="faq.how_to_test"/><a id="q-how_to_test"/><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_test"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_test"/></td><td align="left" valign="top"><p>
|
||||||
Libstdc++ comes with its own validation testsuite, which includes
|
Libstdc++ comes with its own validation testsuite, which includes
|
||||||
conformance testing, regression testing, ABI testing, and
|
conformance testing, regression testing, ABI testing, and
|
||||||
performance testing. Please consult the
|
performance testing. Please consult the
|
||||||
<a class="ulink" href="http://gcc.gnu.org/install/test.html" target="_top">testing
|
<a class="link" href="http://gcc.gnu.org/install/test.html">testing
|
||||||
documentation</a> for more details.
|
documentation</a> for more details.
|
||||||
</p><p>
|
</p><p>
|
||||||
If you find bugs in the testsuite programs themselves, or if you
|
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,
|
think of a new test program that should be added to the suite,
|
||||||
<span class="emphasis"><em>please</em></span> write up your idea and send it to the list!
|
<span class="emphasis"><em>please</em></span> write up your idea and send it to the list!
|
||||||
</p></td></tr><tr class="question" title="3.4."><td align="left" valign="top"><a id="faq.how_to_set_paths"></a><a id="q-how_to_set_paths"></a><p><b>3.4.</b></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
|
</p></td></tr><tr class="question" title="3.4."><td align="left" valign="top"><a id="faq.how_to_set_paths"/><a id="q-how_to_set_paths"/><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_set_paths"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_set_paths"/></td><td align="left" valign="top"><p>
|
||||||
Depending on your platform and library version, the error message might
|
Depending on your platform and library version, the error message might
|
||||||
be similar to one of the following:
|
be similar to one of the following:
|
||||||
</p><pre class="screen">
|
</p><pre class="screen">
|
||||||
|
|
@ -318,9 +318,9 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
Using LD_LIBRARY_PATH is not always the best solution, <a class="link" href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic" title="Finding Dynamic or Shared Libraries">Finding Dynamic or Shared
|
Using LD_LIBRARY_PATH is not always the best solution, <a class="link" href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic" title="Finding Dynamic or Shared Libraries">Finding Dynamic or Shared
|
||||||
Libraries</a> in the manual gives some alternatives.
|
Libraries</a> in the manual gives some alternatives.
|
||||||
</p></td></tr><tr class="question" title="3.5."><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><b>3.5.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="3.5."><td align="left" valign="top"><a id="faq.what_is_libsupcxx"/><a id="q-what_is_libsupcxx"/><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What's libsupc++?
|
What's libsupc++?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"/></td><td align="left" valign="top"><p>
|
||||||
If the only functions from <code class="filename">libstdc++.a</code>
|
If the only functions from <code class="filename">libstdc++.a</code>
|
||||||
which you need are language support functions (those listed in
|
which you need are language support functions (those listed in
|
||||||
<a class="link" href="manual/support.html" title="Chapter 4. Support">clause 18</a> of the
|
<a class="link" href="manual/support.html" title="Chapter 4. Support">clause 18</a> of the
|
||||||
|
|
@ -335,9 +335,9 @@
|
||||||
using anything from the rest of the library, such as IOStreams
|
using anything from the rest of the library, such as IOStreams
|
||||||
or vectors, then you'll still need pieces from
|
or vectors, then you'll still need pieces from
|
||||||
<code class="filename">libstdc++.a</code>.
|
<code class="filename">libstdc++.a</code>.
|
||||||
</p></td></tr><tr class="question" title="3.6."><td align="left" valign="top"><a id="faq.size"></a><a id="q-size"></a><p><b>3.6.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="3.6."><td align="left" valign="top"><a id="faq.size"/><a id="q-size"/><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
|
||||||
This library is HUGE!
|
This library is HUGE!
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size"/></td><td align="left" valign="top"><p>
|
||||||
Usually the size of libraries on disk isn't noticeable. When a
|
Usually the size of libraries on disk isn't noticeable. When a
|
||||||
link editor (or simply <span class="quote">“<span class="quote">linker</span>”</span>) pulls things from a
|
link editor (or simply <span class="quote">“<span class="quote">linker</span>”</span>) pulls things from a
|
||||||
static archive library, only the necessary object files are copied
|
static archive library, only the necessary object files are copied
|
||||||
|
|
@ -366,7 +366,7 @@
|
||||||
collection on unused sections; this reduces the situation to only
|
collection on unused sections; this reduces the situation to only
|
||||||
copying needed functions into the executable, as before, but all
|
copying needed functions into the executable, as before, but all
|
||||||
happens automatically.
|
happens automatically.
|
||||||
</p></td></tr><tr class="qandadiv"><td align="left" valign="top" colspan="2"><h3 class="title"><a id="faq.platform-specific"></a>4. Platform-Specific Issues</h3></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
|
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
|
||||||
Can libstdc++ be used with non-GNU compilers?
|
Can libstdc++ be used with non-GNU compilers?
|
||||||
</a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
|
</a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
|
||||||
No 'long long' type on Solaris?
|
No 'long long' type on Solaris?
|
||||||
|
|
@ -382,9 +382,9 @@
|
||||||
Recent GNU/Linux glibc required?
|
Recent GNU/Linux glibc required?
|
||||||
</a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
|
</a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
|
||||||
Can't use wchar_t/wstring on FreeBSD
|
Can't use wchar_t/wstring on FreeBSD
|
||||||
</a></dt></dl></td></tr><tr class="question" title="4.1."><td align="left" valign="top"><a id="faq.other_compilers"></a><a id="q-other_compilers"></a><p><b>4.1.</b></p></td><td align="left" valign="top"><p>
|
</a></dt></dl></td></tr><tr class="question" title="4.1."><td align="left" valign="top"><a id="faq.other_compilers"/><a id="q-other_compilers"/><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Can libstdc++ be used with non-GNU compilers?
|
Can libstdc++ be used with non-GNU compilers?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-other_compilers"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-other_compilers"/></td><td align="left" valign="top"><p>
|
||||||
Perhaps.
|
Perhaps.
|
||||||
</p><p>
|
</p><p>
|
||||||
Since the goal of ISO Standardization is for all C++
|
Since the goal of ISO Standardization is for all C++
|
||||||
|
|
@ -402,9 +402,9 @@
|
||||||
been known to work with versions of the EDG C++ compiler, and
|
been known to work with versions of the EDG C++ compiler, and
|
||||||
vendor-specific proprietary C++ compilers such as the Intel ICC
|
vendor-specific proprietary C++ compilers such as the Intel ICC
|
||||||
C++ compiler.
|
C++ compiler.
|
||||||
</p></td></tr><tr class="question" title="4.2."><td align="left" valign="top"><a id="faq.solaris_long_long"></a><a id="q-solaris_long_long"></a><p><b>4.2.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="4.2."><td align="left" valign="top"><a id="faq.solaris_long_long"/><a id="q-solaris_long_long"/><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
|
||||||
No 'long long' type on Solaris?
|
No 'long long' type on Solaris?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-solaris_long_long"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-solaris_long_long"/></td><td align="left" valign="top"><p>
|
||||||
By default we try to support the C99 <span class="type">long long</span> type.
|
By default we try to support the C99 <span class="type">long long</span> type.
|
||||||
This requires that certain functions from your C library be present.
|
This requires that certain functions from your C library be present.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -414,9 +414,9 @@
|
||||||
commonly reported platform affected was Solaris.
|
commonly reported platform affected was Solaris.
|
||||||
</p><p>
|
</p><p>
|
||||||
This has been fixed for libstdc++ releases greater than 3.0.3.
|
This has been fixed for libstdc++ releases greater than 3.0.3.
|
||||||
</p></td></tr><tr class="question" title="4.3."><td align="left" valign="top"><a id="faq.predefined"></a><a id="q-predefined"></a><p><b>4.3.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="4.3."><td align="left" valign="top"><a id="faq.predefined"/><a id="q-predefined"/><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
|
||||||
<code class="constant">_XOPEN_SOURCE</code> and <code class="constant">_GNU_SOURCE</code> are always defined?
|
<code class="constant">_XOPEN_SOURCE</code> and <code class="constant">_GNU_SOURCE</code> are always defined?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-predefined"></a></td><td align="left" valign="top"><p>On Solaris, g++ (but not gcc) always defines the preprocessor
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-predefined"/></td><td align="left" valign="top"><p>On Solaris, g++ (but not gcc) always defines the preprocessor
|
||||||
macro <code class="constant">_XOPEN_SOURCE</code>. On GNU/Linux, the same happens
|
macro <code class="constant">_XOPEN_SOURCE</code>. On GNU/Linux, the same happens
|
||||||
with <code class="constant">_GNU_SOURCE</code>. (This is not an exhaustive list;
|
with <code class="constant">_GNU_SOURCE</code>. (This is not an exhaustive list;
|
||||||
other macros and other platforms are also affected.)
|
other macros and other platforms are also affected.)
|
||||||
|
|
@ -440,18 +440,18 @@
|
||||||
<span class="command"><strong>g++ -E -dM - < /dev/null"</strong></span> to display
|
<span class="command"><strong>g++ -E -dM - < /dev/null"</strong></span> to display
|
||||||
a list of predefined macros for any particular installation.
|
a list of predefined macros for any particular installation.
|
||||||
</p><p>This has been discussed on the mailing lists
|
</p><p>This has been discussed on the mailing lists
|
||||||
<a class="ulink" href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&format=builtin-long&sort=score&words=_XOPEN_SOURCE+Solaris" target="_top">quite a bit</a>.
|
<a class="link" href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&format=builtin-long&sort=score&words=_XOPEN_SOURCE+Solaris">quite a bit</a>.
|
||||||
</p><p>This method is something of a wart. We'd like to find a cleaner
|
</p><p>This method is something of a wart. We'd like to find a cleaner
|
||||||
solution, but nobody yet has contributed the time.
|
solution, but nobody yet has contributed the time.
|
||||||
</p></td></tr><tr class="question" title="4.4."><td align="left" valign="top"><a id="faq.darwin_ctype"></a><a id="q-darwin_ctype"></a><p><b>4.4.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="4.4."><td align="left" valign="top"><a id="faq.darwin_ctype"/><a id="q-darwin_ctype"/><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Mac OS X <code class="filename">ctype.h</code> is broken! How can I fix it?
|
Mac OS X <code class="filename">ctype.h</code> is broken! How can I fix it?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-darwin_ctype"></a></td><td align="left" valign="top"><p>This is a long-standing bug in the OS X support. Fortunately,
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-darwin_ctype"/></td><td align="left" valign="top"><p>This is a long-standing bug in the OS X support. Fortunately,
|
||||||
the patch is quite simple, and well-known.
|
the patch is quite simple, and well-known.
|
||||||
<a class="ulink" href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html" target="_top"> Here's a
|
<a class="link" href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html"> Here's a
|
||||||
link to the solution</a>.
|
link to the solution</a>.
|
||||||
</p></td></tr><tr class="question" title="4.5."><td align="left" valign="top"><a id="faq.threads_i386"></a><a id="q-threads_i386"></a><p><b>4.5.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="4.5."><td align="left" valign="top"><a id="faq.threads_i386"/><a id="q-threads_i386"/><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Threading is broken on i386?
|
Threading is broken on i386?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-threads_i386"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-threads_i386"/></td><td align="left" valign="top"><p>
|
||||||
</p><p>Support for atomic integer operations is/was broken on i386
|
</p><p>Support for atomic integer operations is/was broken on i386
|
||||||
platforms. The assembly code accidentally used opcodes that are
|
platforms. The assembly code accidentally used opcodes that are
|
||||||
only available on the i486 and later. So if you configured GCC
|
only available on the i486 and later. So if you configured GCC
|
||||||
|
|
@ -459,9 +459,9 @@
|
||||||
on an i686, then you would encounter no problems. Only when
|
on an i686, then you would encounter no problems. Only when
|
||||||
actually running the code on a i386 will the problem appear.
|
actually running the code on a i386 will the problem appear.
|
||||||
</p><p>This is fixed in 3.2.2.
|
</p><p>This is fixed in 3.2.2.
|
||||||
</p></td></tr><tr class="question" title="4.6."><td align="left" valign="top"><a id="faq.atomic_mips"></a><a id="q-atomic_mips"></a><p><b>4.6.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="4.6."><td align="left" valign="top"><a id="faq.atomic_mips"/><a id="q-atomic_mips"/><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
|
||||||
MIPS atomic operations
|
MIPS atomic operations
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-atomic_mips"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-atomic_mips"/></td><td align="left" valign="top"><p>
|
||||||
The atomic locking routines for MIPS targets requires MIPS II
|
The atomic locking routines for MIPS targets requires MIPS II
|
||||||
and later. A patch went in just after the 3.3 release to
|
and later. A patch went in just after the 3.3 release to
|
||||||
make mips* use the generic implementation instead. You can also
|
make mips* use the generic implementation instead. You can also
|
||||||
|
|
@ -469,9 +469,9 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
The mips*-*-linux* port continues to use the MIPS II routines, and more
|
The mips*-*-linux* port continues to use the MIPS II routines, and more
|
||||||
work in this area is expected.
|
work in this area is expected.
|
||||||
</p></td></tr><tr class="question" title="4.7."><td align="left" valign="top"><a id="faq.linux_glibc"></a><a id="q-linux_glibc"></a><p><b>4.7.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="4.7."><td align="left" valign="top"><a id="faq.linux_glibc"/><a id="q-linux_glibc"/><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Recent GNU/Linux glibc required?
|
Recent GNU/Linux glibc required?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"></a></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"/></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
|
||||||
5.0.1) and later uses localization and formatting code from the system
|
5.0.1) and later uses localization and formatting code from the system
|
||||||
C library (glibc) version 2.2.5 which contains necessary bugfixes.
|
C library (glibc) version 2.2.5 which contains necessary bugfixes.
|
||||||
Most GNU/Linux distros make more recent versions available now.
|
Most GNU/Linux distros make more recent versions available now.
|
||||||
|
|
@ -480,9 +480,9 @@
|
||||||
</p><p>The guideline is simple: the more recent the C++ library, the
|
</p><p>The guideline is simple: the more recent the C++ library, the
|
||||||
more recent the C library. (This is also documented in the main
|
more recent the C library. (This is also documented in the main
|
||||||
GCC installation instructions.)
|
GCC installation instructions.)
|
||||||
</p></td></tr><tr class="question" title="4.8."><td align="left" valign="top"><a id="faq.freebsd_wchar"></a><a id="q-freebsd_wchar"></a><p><b>4.8.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="4.8."><td align="left" valign="top"><a id="faq.freebsd_wchar"/><a id="q-freebsd_wchar"/><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Can't use wchar_t/wstring on FreeBSD
|
Can't use wchar_t/wstring on FreeBSD
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-freebsd_wchar"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-freebsd_wchar"/></td><td align="left" valign="top"><p>
|
||||||
Older versions of FreeBSD's C library do not have sufficient
|
Older versions of FreeBSD's C library do not have sufficient
|
||||||
support for wide character functions, and as a result the
|
support for wide character functions, and as a result the
|
||||||
libstdc++ configury decides that wchar_t support should be
|
libstdc++ configury decides that wchar_t support should be
|
||||||
|
|
@ -493,15 +493,15 @@
|
||||||
like <code class="classname">wstring</code> were present. This impacted Solaris,
|
like <code class="classname">wstring</code> were present. This impacted Solaris,
|
||||||
Darwin, and BSD variants, and is fixed in libstdc++ versions post 4.1.0.
|
Darwin, and BSD variants, and is fixed in libstdc++ versions post 4.1.0.
|
||||||
</p><p>
|
</p><p>
|
||||||
</p></td></tr><tr class="qandadiv"><td align="left" valign="top" colspan="2"><h3 class="title"><a id="faq.known_bugs"></a>5. Known Bugs</h3></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>5.1. <a href="faq.html#faq.what_works">
|
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>5.1. <a href="faq.html#faq.what_works">
|
||||||
What works already?
|
What works already?
|
||||||
</a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
|
</a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
|
||||||
Bugs in the ISO C++ language or library specification
|
Bugs in the ISO C++ language or library specification
|
||||||
</a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
|
</a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
|
||||||
Bugs in the compiler (gcc/g++) and not libstdc++
|
Bugs in the compiler (gcc/g++) and not libstdc++
|
||||||
</a></dt></dl></td></tr><tr class="question" title="5.1."><td align="left" valign="top"><a id="faq.what_works"></a><a id="q-what_works"></a><p><b>5.1.</b></p></td><td align="left" valign="top"><p>
|
</a></dt></dl></td></tr><tr class="question" title="5.1."><td align="left" valign="top"><a id="faq.what_works"/><a id="q-what_works"/><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What works already?
|
What works already?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_works"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_works"/></td><td align="left" valign="top"><p>
|
||||||
Short answer: Pretty much everything <span class="emphasis"><em>works</em></span>
|
Short answer: Pretty much everything <span class="emphasis"><em>works</em></span>
|
||||||
except for some corner cases. Support for localization
|
except for some corner cases. Support for localization
|
||||||
in <code class="classname">locale</code> may be incomplete on non-GNU
|
in <code class="classname">locale</code> may be incomplete on non-GNU
|
||||||
|
|
@ -513,24 +513,24 @@
|
||||||
<a class="link" href="manual/status.html#status.iso.1998" title="C++ 1998/2003">C++98</a>,
|
<a class="link" href="manual/status.html#status.iso.1998" title="C++ 1998/2003">C++98</a>,
|
||||||
<a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">TR1</a>, and
|
<a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">TR1</a>, and
|
||||||
<a class="link" href="manual/status.html#status.iso.200x" title="C++ 200x">C++0x</a>.
|
<a class="link" href="manual/status.html#status.iso.200x" title="C++ 200x">C++0x</a>.
|
||||||
</p></td></tr><tr class="question" title="5.2."><td align="left" valign="top"><a id="faq.standard_bugs"></a><a id="q-standard_bugs"></a><p><b>5.2.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="5.2."><td align="left" valign="top"><a id="faq.standard_bugs"/><a id="q-standard_bugs"/><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Bugs in the ISO C++ language or library specification
|
Bugs in the ISO C++ language or library specification
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-standard_bugs"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-standard_bugs"/></td><td align="left" valign="top"><p>
|
||||||
Unfortunately, there are some.
|
Unfortunately, there are some.
|
||||||
</p><p>
|
</p><p>
|
||||||
For those people who are not part of the ISO Library Group
|
For those people who are not part of the ISO Library Group
|
||||||
(i.e., nearly all of us needing to read this page in the first
|
(i.e., nearly all of us needing to read this page in the first
|
||||||
place), a public list of the library defects is occasionally
|
place), a public list of the library defects is occasionally
|
||||||
published <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/" target="_top">here</a>.
|
published <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/">here</a>.
|
||||||
Some of these issues have resulted in code changes in libstdc++.
|
Some of these issues have resulted in code changes in libstdc++.
|
||||||
</p><p>
|
</p><p>
|
||||||
If you think you've discovered a new bug that is not listed,
|
If you think you've discovered a new bug that is not listed,
|
||||||
please post a message describing your problem
|
please post a message describing your problem
|
||||||
to <code class="email"><<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>></code> or the Usenet group
|
to <code class="email"><<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>></code> or the Usenet group
|
||||||
comp.lang.c++.moderated.
|
comp.lang.c++.moderated.
|
||||||
</p></td></tr><tr class="question" title="5.3."><td align="left" valign="top"><a id="faq.compiler_bugs"></a><a id="q-compiler_bugs"></a><p><b>5.3.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="5.3."><td align="left" valign="top"><a id="faq.compiler_bugs"/><a id="q-compiler_bugs"/><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Bugs in the compiler (gcc/g++) and not libstdc++
|
Bugs in the compiler (gcc/g++) and not libstdc++
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-compiler_bugs"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-compiler_bugs"/></td><td align="left" valign="top"><p>
|
||||||
On occasion, the compiler is wrong. Please be advised that this
|
On occasion, the compiler is wrong. Please be advised that this
|
||||||
happens much less often than one would think, and avoid jumping to
|
happens much less often than one would think, and avoid jumping to
|
||||||
conclusions.
|
conclusions.
|
||||||
|
|
@ -541,9 +541,9 @@
|
||||||
these lists with terms describing your issue.
|
these lists with terms describing your issue.
|
||||||
</p><p>
|
</p><p>
|
||||||
Before reporting a bug, please examine the
|
Before reporting a bug, please examine the
|
||||||
<a class="ulink" href="http://gcc.gnu.org/bugs.html" target="_top">bugs database</a> with the
|
<a class="link" href="http://gcc.gnu.org/bugs/">bugs database</a> with the
|
||||||
category set to <span class="quote">“<span class="quote">g++</span>”</span>.
|
category set to <span class="quote">“<span class="quote">g++</span>”</span>.
|
||||||
</p></td></tr><tr class="qandadiv"><td align="left" valign="top" colspan="2"><h3 class="title"><a id="faq.known_non-bugs"></a>6. Known Non-Bugs</h3></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
|
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
|
||||||
Reopening a stream fails
|
Reopening a stream fails
|
||||||
</a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
|
</a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
|
||||||
-Weffc++ complains too much
|
-Weffc++ complains too much
|
||||||
|
|
@ -563,19 +563,19 @@
|
||||||
list::size() is O(n)!
|
list::size() is O(n)!
|
||||||
</a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
|
</a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
|
||||||
Aw, that's easy to fix!
|
Aw, that's easy to fix!
|
||||||
</a></dt></dl></td></tr><tr class="question" title="6.1."><td align="left" valign="top"><a id="faq.stream_reopening_fails"></a><a id="q-stream_reopening_fails"></a><p><b>6.1.</b></p></td><td align="left" valign="top"><p>
|
</a></dt></dl></td></tr><tr class="question" title="6.1."><td align="left" valign="top"><a id="faq.stream_reopening_fails"/><a id="q-stream_reopening_fails"/><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Reopening a stream fails
|
Reopening a stream fails
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-stream_reopening_fails"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-stream_reopening_fails"/></td><td align="left" valign="top"><p>
|
||||||
One of the most-reported non-bug reports. Executing a sequence like:
|
One of the most-reported non-bug reports. Executing a sequence like:
|
||||||
</p><div class="literallayout"><p><br />
|
</p><div class="literallayout"><p><br/>
|
||||||
#include <fstream><br />
|
#include <fstream><br/>
|
||||||
...<br />
|
...<br/>
|
||||||
std::fstream fs(<span class="quote">“<span class="quote">a_file</span>”</span>);<br />
|
std::fstream fs(<span class="quote">“<span class="quote">a_file</span>”</span>);<br/>
|
||||||
// .<br />
|
// .<br/>
|
||||||
// . do things with fs...<br />
|
// . do things with fs...<br/>
|
||||||
// .<br />
|
// .<br/>
|
||||||
fs.close();<br />
|
fs.close();<br/>
|
||||||
fs.open(<span class="quote">“<span class="quote">a_new_file</span>”</span>);<br />
|
fs.open(<span class="quote">“<span class="quote">a_new_file</span>”</span>);<br/>
|
||||||
</p></div><p>
|
</p></div><p>
|
||||||
All operations on the re-opened <code class="varname">fs</code> will fail, or at
|
All operations on the re-opened <code class="varname">fs</code> will fail, or at
|
||||||
least act very strangely. Yes, they often will, especially if
|
least act very strangely. Yes, they often will, especially if
|
||||||
|
|
@ -590,9 +590,9 @@
|
||||||
<span class="emphasis"><em>Update:</em></span> for GCC 4.0 we implemented the resolution
|
<span class="emphasis"><em>Update:</em></span> for GCC 4.0 we implemented the resolution
|
||||||
of <a class="link" href="manual/bugs.html" title="Bugs">DR #409</a> and open()
|
of <a class="link" href="manual/bugs.html" title="Bugs">DR #409</a> and open()
|
||||||
now calls <code class="function">clear()</code> on success!
|
now calls <code class="function">clear()</code> on success!
|
||||||
</p></td></tr><tr class="question" title="6.2."><td align="left" valign="top"><a id="faq.wefcxx_verbose"></a><a id="q-wefcxx_verbose"></a><p><b>6.2.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="6.2."><td align="left" valign="top"><a id="faq.wefcxx_verbose"/><a id="q-wefcxx_verbose"/><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
|
||||||
-Weffc++ complains too much
|
-Weffc++ complains too much
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-wefcxx_verbose"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-wefcxx_verbose"/></td><td align="left" valign="top"><p>
|
||||||
Many warnings are emitted when <code class="literal">-Weffc++</code> is used. Making
|
Many warnings are emitted when <code class="literal">-Weffc++</code> is used. Making
|
||||||
libstdc++ <code class="literal">-Weffc++</code>-clean is not a goal of the project,
|
libstdc++ <code class="literal">-Weffc++</code>-clean is not a goal of the project,
|
||||||
for a few reasons. Mainly, that option tries to enforce
|
for a few reasons. Mainly, that option tries to enforce
|
||||||
|
|
@ -602,31 +602,24 @@
|
||||||
We do, however, try to have libstdc++ sources as clean as possible. If
|
We do, however, try to have libstdc++ sources as clean as possible. If
|
||||||
you see some simple changes that pacify <code class="literal">-Weffc++</code>
|
you see some simple changes that pacify <code class="literal">-Weffc++</code>
|
||||||
without other drawbacks, send us a patch.
|
without other drawbacks, send us a patch.
|
||||||
</p></td></tr><tr class="question" title="6.3."><td align="left" valign="top"><a id="faq.ambiguous_overloads"></a><a id="q-ambiguous_overloads"></a><p><b>6.3.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="6.3."><td align="left" valign="top"><a id="faq.ambiguous_overloads"/><a id="q-ambiguous_overloads"/><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Ambiguous overloads after including an old-style header
|
Ambiguous overloads after including an old-style header
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-ambiguous_overloads"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-ambiguous_overloads"/></td><td align="left" valign="top"><p>
|
||||||
Another problem is the <code class="literal">rel_ops</code> namespace and the template
|
Another problem is the <code class="literal">rel_ops</code> namespace and the template
|
||||||
comparison operator functions contained therein. If they become
|
comparison operator functions contained therein. If they become
|
||||||
visible in the same namespace as other comparison functions
|
visible in the same namespace as other comparison functions
|
||||||
(e.g., <span class="quote">“<span class="quote">using</span>”</span> them and the <iterator> header),
|
(e.g., <span class="quote">“<span class="quote">using</span>”</span> them and the <iterator> header),
|
||||||
then you will suddenly be faced with huge numbers of ambiguity
|
then you will suddenly be faced with huge numbers of ambiguity
|
||||||
errors. This was discussed on the -v3 list; Nathan Myers
|
errors. This was discussed on the -v3 list; Nathan Myers
|
||||||
<a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html" target="_top">sums
|
<a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html">sums
|
||||||
things up here</a>. The collisions with vector/string iterator
|
things up here</a>. The collisions with vector/string iterator
|
||||||
types have been fixed for 3.1.
|
types have been fixed for 3.1.
|
||||||
</p></td></tr><tr class="question" title="6.4."><td align="left" valign="top"><a id="faq.v2_headers"></a><a id="q-v2_headers"></a><p><b>6.4.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="6.4."><td align="left" valign="top"><a id="faq.v2_headers"/><a id="q-v2_headers"/><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
|
||||||
The g++-3 headers are <span class="emphasis"><em>not ours</em></span>
|
The g++-3 headers are <span class="emphasis"><em>not ours</em></span>
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-v2_headers"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-v2_headers"/></td><td align="left" valign="top"><p>
|
||||||
If you have found an extremely broken header file which is
|
If you are using headers in
|
||||||
causing problems for you, look carefully before submitting a
|
<code class="filename">${prefix}/include/g++-3</code>, or if the installed
|
||||||
"high" priority bug report (which you probably
|
library's name looks like <code class="filename">libstdc++-2.10.a</code> or
|
||||||
shouldn't do anyhow; see the last paragraph of the page
|
|
||||||
describing <a class="ulink" href="http://gcc.gnu.org/bugs.html" target="_top">the GCC
|
|
||||||
bug database</a>).
|
|
||||||
</p><p>
|
|
||||||
If the headers are in <code class="filename">${prefix}/include/g++-3</code>, or
|
|
||||||
if the installed library's name looks like
|
|
||||||
<code class="filename">libstdc++-2.10.a</code> or
|
|
||||||
<code class="filename">libstdc++-libc6-2.10.so</code>, then you are using the
|
<code class="filename">libstdc++-libc6-2.10.so</code>, then you are using the
|
||||||
old libstdc++-v2 library, which is nonstandard and
|
old libstdc++-v2 library, which is nonstandard and
|
||||||
unmaintained. Do not report problems with -v2 to the -v3
|
unmaintained. Do not report problems with -v2 to the -v3
|
||||||
|
|
@ -637,10 +630,10 @@
|
||||||
'v'?). Starting with version 3.2 the headers are installed in
|
'v'?). Starting with version 3.2 the headers are installed in
|
||||||
<code class="filename">${prefix}/include/c++/${version}</code> as this prevents
|
<code class="filename">${prefix}/include/c++/${version}</code> as this prevents
|
||||||
headers from previous versions being found by mistake.
|
headers from previous versions being found by mistake.
|
||||||
</p></td></tr><tr class="question" title="6.5."><td align="left" valign="top"><a id="faq.boost_concept_checks"></a><a id="q-boost_concept_checks"></a><p><b>6.5.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="6.5."><td align="left" valign="top"><a id="faq.boost_concept_checks"/><a id="q-boost_concept_checks"/><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Errors about <span class="emphasis"><em>*Concept</em></span> and
|
Errors about <span class="emphasis"><em>*Concept</em></span> and
|
||||||
<span class="emphasis"><em>constraints</em></span> in the STL
|
<span class="emphasis"><em>constraints</em></span> in the STL
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-boost_concept_checks"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-boost_concept_checks"/></td><td align="left" valign="top"><p>
|
||||||
If you see compilation errors containing messages about
|
If you see compilation errors containing messages about
|
||||||
<span class="errortext">foo Concept </span>and something to do with a
|
<span class="errortext">foo Concept </span>and something to do with a
|
||||||
<span class="errortext">constraints</span> member function, then most
|
<span class="errortext">constraints</span> member function, then most
|
||||||
|
|
@ -654,31 +647,31 @@
|
||||||
checks, is available in the
|
checks, is available in the
|
||||||
<a class="link" href="manual/bk01pt02ch05s02.html" title="Concept Checking">Diagnostics</a>.
|
<a class="link" href="manual/bk01pt02ch05s02.html" title="Concept Checking">Diagnostics</a>.
|
||||||
chapter of the manual.
|
chapter of the manual.
|
||||||
</p></td></tr><tr class="question" title="6.6."><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><b>6.6.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="6.6."><td align="left" valign="top"><a id="faq.dlopen_crash"/><a id="q-dlopen_crash"/><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Program crashes when using library code in a
|
Program crashes when using library code in a
|
||||||
dynamically-loaded library
|
dynamically-loaded library
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-dlopen_crash"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-dlopen_crash"/></td><td align="left" valign="top"><p>
|
||||||
If you are using the C++ library across dynamically-loaded
|
If you are using the C++ library across dynamically-loaded
|
||||||
objects, make certain that you are passing the correct options
|
objects, make certain that you are passing the correct options
|
||||||
when compiling and linking:
|
when compiling and linking:
|
||||||
</p><div class="literallayout"><p><br />
|
</p><div class="literallayout"><p><br/>
|
||||||
// compile your library components<br />
|
// compile your library components<br/>
|
||||||
g++ -fPIC -c a.cc<br />
|
g++ -fPIC -c a.cc<br/>
|
||||||
g++ -fPIC -c b.cc<br />
|
g++ -fPIC -c b.cc<br/>
|
||||||
...<br />
|
...<br/>
|
||||||
g++ -fPIC -c z.cc<br />
|
g++ -fPIC -c z.cc<br/>
|
||||||
<br />
|
<br/>
|
||||||
// create your library<br />
|
// create your library<br/>
|
||||||
g++ -fPIC -shared -rdynamic -o libfoo.so a.o b.o ... z.o<br />
|
g++ -fPIC -shared -rdynamic -o libfoo.so a.o b.o ... z.o<br/>
|
||||||
<br />
|
<br/>
|
||||||
// link the executable<br />
|
// link the executable<br/>
|
||||||
g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl<br />
|
g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl<br/>
|
||||||
</p></div></td></tr><tr class="question" title="6.7."><td align="left" valign="top"><a id="faq.memory_leaks"></a><a id="q-memory_leaks"></a><p><b>6.7.</b></p></td><td align="left" valign="top"><p>
|
</p></div></td></tr><tr class="question" title="6.7."><td align="left" valign="top"><a id="faq.memory_leaks"/><a id="q-memory_leaks"/><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
|
||||||
<span class="quote">“<span class="quote">Memory leaks</span>”</span> in containers
|
<span class="quote">“<span class="quote">Memory leaks</span>”</span> in containers
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-memory_leaks"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-memory_leaks"/></td><td align="left" valign="top"><p>
|
||||||
A few people have reported that the standard containers appear
|
A few people have reported that the standard containers appear
|
||||||
to leak memory when tested with memory checkers such as
|
to leak memory when tested with memory checkers such as
|
||||||
<a class="ulink" href="http://valgrind.org/" target="_top">valgrind</a>.
|
<a class="link" href="http://valgrind.org/">valgrind</a>.
|
||||||
The library's default allocators keep free memory in a pool
|
The library's default allocators keep free memory in a pool
|
||||||
for later reuse, rather than returning it to the OS. Although
|
for later reuse, rather than returning it to the OS. Although
|
||||||
this memory is always reachable by the library and is never
|
this memory is always reachable by the library and is never
|
||||||
|
|
@ -686,18 +679,18 @@
|
||||||
want to test the library for memory leaks please read
|
want to test the library for memory leaks please read
|
||||||
<a class="link" href="manual/debug.html#debug.memory" title="Memory Leak Hunting">Tips for memory leak hunting</a>
|
<a class="link" href="manual/debug.html#debug.memory" title="Memory Leak Hunting">Tips for memory leak hunting</a>
|
||||||
first.
|
first.
|
||||||
</p></td></tr><tr class="question" title="6.8."><td align="left" valign="top"><a id="faq.list_size_on"></a><a id="q-list_size_on"></a><p><b>6.8.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="6.8."><td align="left" valign="top"><a id="faq.list_size_on"/><a id="q-list_size_on"/><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
|
||||||
list::size() is O(n)!
|
list::size() is O(n)!
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"/></td><td align="left" valign="top"><p>
|
||||||
See
|
See
|
||||||
the <a class="link" href="manual/containers.html" title="Chapter 9. Containers">Containers</a>
|
the <a class="link" href="manual/containers.html" title="Chapter 9. Containers">Containers</a>
|
||||||
chapter.
|
chapter.
|
||||||
</p></td></tr><tr class="question" title="6.9."><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><b>6.9.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="6.9."><td align="left" valign="top"><a id="faq.easy_to_fix"/><a id="q-easy_to_fix"/><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Aw, that's easy to fix!
|
Aw, that's easy to fix!
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-easy_to_fix"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-easy_to_fix"/></td><td align="left" valign="top"><p>
|
||||||
If you have found a bug in the library and you think you have
|
If you have found a bug in the library and you think you have
|
||||||
a working fix, then send it in! The main GCC site has a page
|
a working fix, then send it in! The main GCC site has a page
|
||||||
on <a class="ulink" href="http://gcc.gnu.org/contribute.html" target="_top">submitting
|
on <a class="link" href="http://gcc.gnu.org/contribute.html">submitting
|
||||||
patches</a> that covers the procedure, but for libstdc++ you
|
patches</a> that covers the procedure, but for libstdc++ you
|
||||||
should also send the patch to our mailing list in addition to
|
should also send the patch to our mailing list in addition to
|
||||||
the GCC patches mailing list. The libstdc++
|
the GCC patches mailing list. The libstdc++
|
||||||
|
|
@ -706,11 +699,11 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
In addition to the description, the patch, and the ChangeLog
|
In addition to the description, the patch, and the ChangeLog
|
||||||
entry, it is a Good Thing if you can additionally create a small
|
entry, it is a Good Thing if you can additionally create a small
|
||||||
test program to test for the presence of the bug that your
|
test program to test for the presence of the bug that your patch
|
||||||
patch fixes. Bugs have a way of being reintroduced; if an old
|
fixes. Bugs have a way of being reintroduced; if an old bug
|
||||||
bug creeps back in, it will be caught immediately by the
|
creeps back in, it will be caught immediately by the testsuite -
|
||||||
<a class="ulink" href="#2_4" target="_top">testsuite</a> -- but only if such a test exists.
|
but only if such a test exists.
|
||||||
</p></td></tr><tr class="qandadiv"><td align="left" valign="top" colspan="2"><h3 class="title"><a id="faq.misc"></a>7. Miscellaneous</h3></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
|
</p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
|
||||||
string::iterator is not char*; vector<T>::iterator is not T*
|
string::iterator is not char*; vector<T>::iterator is not T*
|
||||||
</a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
|
</a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
|
||||||
What's next after libstdc++?
|
What's next after libstdc++?
|
||||||
|
|
@ -725,9 +718,9 @@
|
||||||
What's an ABI and why is it so messy?
|
What's an ABI and why is it so messy?
|
||||||
</a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
|
</a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
|
||||||
How do I make std::vector<T>::capacity() == std::vector<T>::size?
|
How do I make std::vector<T>::capacity() == std::vector<T>::size?
|
||||||
</a></dt></dl></td></tr><tr class="question" title="7.1."><td align="left" valign="top"><a id="faq.iterator_as_pod"></a><a id="faq.iterator_as_pod_q"></a><p><b>7.1.</b></p></td><td align="left" valign="top"><p>
|
</a></dt></dl></td></tr><tr class="question" title="7.1."><td align="left" valign="top"><a id="faq.iterator_as_pod"/><a id="faq.iterator_as_pod_q"/><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
|
||||||
string::iterator is not char*; vector<T>::iterator is not T*
|
string::iterator is not char*; vector<T>::iterator is not T*
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.iterator_as_pod_a"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.iterator_as_pod_a"/></td><td align="left" valign="top"><p>
|
||||||
If you have code that depends on container<T> iterators
|
If you have code that depends on container<T> iterators
|
||||||
being implemented as pointer-to-T, your code is broken. It's
|
being implemented as pointer-to-T, your code is broken. It's
|
||||||
considered a feature, not a bug, that libstdc++ points this out.
|
considered a feature, not a bug, that libstdc++ points this out.
|
||||||
|
|
@ -744,9 +737,9 @@
|
||||||
certain expressions to <code class="varname">&*i</code>. Future revisions
|
certain expressions to <code class="varname">&*i</code>. Future revisions
|
||||||
of the Standard are expected to bless this usage for
|
of the Standard are expected to bless this usage for
|
||||||
vector<> (but not for basic_string<>).
|
vector<> (but not for basic_string<>).
|
||||||
</p></td></tr><tr class="question" title="7.2."><td align="left" valign="top"><a id="faq.what_is_next"></a><a id="q-what_is_next"></a><p><b>7.2.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="7.2."><td align="left" valign="top"><a id="faq.what_is_next"/><a id="q-what_is_next"/><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What's next after libstdc++?
|
What's next after libstdc++?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_next"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_next"/></td><td align="left" valign="top"><p>
|
||||||
Hopefully, not much. The goal of libstdc++ is to produce a
|
Hopefully, not much. The goal of libstdc++ is to produce a
|
||||||
fully-compliant, fully-portable Standard Library. After that,
|
fully-compliant, fully-portable Standard Library. After that,
|
||||||
we're mostly done: there won't <span class="emphasis"><em>be</em></span> any
|
we're mostly done: there won't <span class="emphasis"><em>be</em></span> any
|
||||||
|
|
@ -755,12 +748,12 @@
|
||||||
There is an effort underway to add significant extensions to
|
There is an effort underway to add significant extensions to
|
||||||
the standard library specification. The latest version of
|
the standard library specification. The latest version of
|
||||||
this effort is described in
|
this effort is described in
|
||||||
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">
|
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
|
||||||
The C++ Library Technical Report 1</a>.
|
The C++ Library Technical Report 1</a>.
|
||||||
</p></td></tr><tr class="question" title="7.3."><td align="left" valign="top"><a id="faq.sgi_stl"></a><a id="q-sgi_stl"></a><p><b>7.3.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="7.3."><td align="left" valign="top"><a id="faq.sgi_stl"/><a id="q-sgi_stl"/><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What about the STL from SGI?
|
What about the STL from SGI?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-sgi_stl"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-sgi_stl"/></td><td align="left" valign="top"><p>
|
||||||
The <a class="ulink" href="http://www.sgi.com/tech/stl/" target="_top">STL from SGI</a>,
|
The <a class="link" href="http://www.sgi.com/tech/stl/">STL from SGI</a>,
|
||||||
version 3.3, was the final merge of the STL codebase. The
|
version 3.3, was the final merge of the STL codebase. The
|
||||||
code in libstdc++ contains many fixes and changes, and
|
code in libstdc++ contains many fixes and changes, and
|
||||||
the SGI code is no longer under active
|
the SGI code is no longer under active
|
||||||
|
|
@ -780,24 +773,24 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
The FAQ for SGI's STL (one jump off of their main page) is
|
The FAQ for SGI's STL (one jump off of their main page) is
|
||||||
still recommended reading.
|
still recommended reading.
|
||||||
</p></td></tr><tr class="question" title="7.4."><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"></a><a id="q-extensions_and_backwards_compat"></a><p><b>7.4.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="7.4."><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"/><a id="q-extensions_and_backwards_compat"/><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Extensions and Backward Compatibility
|
Extensions and Backward Compatibility
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-extensions_and_backwards_compat"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-extensions_and_backwards_compat"/></td><td align="left" valign="top"><p>
|
||||||
See the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">link</a> on backwards compatibility and <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">link</a> on evolution.
|
See the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">link</a> on backwards compatibility and <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">link</a> on evolution.
|
||||||
</p></td></tr><tr class="question" title="7.5."><td align="left" valign="top"><a id="faq.tr1_support"></a><a id="q-tr1_support"></a><p><b>7.5.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="7.5."><td align="left" valign="top"><a id="faq.tr1_support"/><a id="q-tr1_support"/><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
|
||||||
Does libstdc++ support TR1?
|
Does libstdc++ support TR1?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-tr1_support"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-tr1_support"/></td><td align="left" valign="top"><p>
|
||||||
Yes.
|
Yes.
|
||||||
</p><p>
|
</p><p>
|
||||||
The C++ Standard Library Technical Report adds many new features to
|
The C++ Standard Library Technical Report adds many new features to
|
||||||
the library. The latest version of this effort is described in
|
the library. The latest version of this effort is described in
|
||||||
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">
|
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
|
||||||
Technical Report 1</a>.
|
Technical Report 1</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
The implementation status of TR1 in libstdc++ can be tracked <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">on the TR1 status
|
The implementation status of TR1 in libstdc++ can be tracked <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">on the TR1 status
|
||||||
page</a>.
|
page</a>.
|
||||||
</p></td></tr><tr class="question" title="7.6."><td align="left" valign="top"><a id="faq.get_iso_cxx"></a><a id="q-get_iso_cxx"></a><p><b>7.6.</b></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
|
</p></td></tr><tr class="question" title="7.6."><td align="left" valign="top"><a id="faq.get_iso_cxx"/><a id="q-get_iso_cxx"/><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-get_iso_cxx"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-get_iso_cxx"/></td><td align="left" valign="top"><p>
|
||||||
Copies of the full ISO 14882 standard are available on line via
|
Copies of the full ISO 14882 standard are available on line via
|
||||||
the ISO mirror site for committee members. Non-members, or those
|
the ISO mirror site for committee members. Non-members, or those
|
||||||
who have not paid for the privilege of sitting on the committee
|
who have not paid for the privilege of sitting on the committee
|
||||||
|
|
@ -805,19 +798,19 @@
|
||||||
get a copy of the standard from their respective national
|
get a copy of the standard from their respective national
|
||||||
standards organization. In the USA, this national standards
|
standards organization. In the USA, this national standards
|
||||||
organization is ANSI and their website is
|
organization is ANSI and their website is
|
||||||
right <a class="ulink" href="http://www.ansi.org" target="_top">here</a>. (And if
|
right <a class="link" href="http://www.ansi.org">here</a>. (And if
|
||||||
you've already registered with them, clicking this link will take
|
you've already registered with them, clicking this link will take
|
||||||
you to directly to the place where you can
|
you to directly to the place where you can
|
||||||
<a class="ulink" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003" target="_top">buy the standard on-line</a>.
|
<a class="link" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Who is your country's member body? Visit the
|
Who is your country's member body? Visit the
|
||||||
<a class="ulink" href="http://www.iso.ch/" target="_top">ISO homepage</a> and find out!
|
<a class="link" href="http://www.iso.ch/">ISO homepage</a> and find out!
|
||||||
</p><p>
|
</p><p>
|
||||||
The 2003 version of the standard (the 1998 version plus TC1) is
|
The 2003 version of the standard (the 1998 version plus TC1) is
|
||||||
available in print, ISBN 0-470-84674-7.
|
available in print, ISBN 0-470-84674-7.
|
||||||
</p></td></tr><tr class="question" title="7.7."><td align="left" valign="top"><a id="faq.what_is_abi"></a><a id="q-what_is_abi"></a><p><b>7.7.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="7.7."><td align="left" valign="top"><a id="faq.what_is_abi"/><a id="q-what_is_abi"/><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
|
||||||
What's an ABI and why is it so messy?
|
What's an ABI and why is it so messy?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_abi"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_abi"/></td><td align="left" valign="top"><p>
|
||||||
<acronym class="acronym">ABI</acronym> stands for <span class="quote">“<span class="quote">Application Binary
|
<acronym class="acronym">ABI</acronym> stands for <span class="quote">“<span class="quote">Application Binary
|
||||||
Interface</span>”</span>. Conventionally, it refers to a great
|
Interface</span>”</span>. Conventionally, it refers to a great
|
||||||
mass of details about how arguments are arranged on the call
|
mass of details about how arguments are arranged on the call
|
||||||
|
|
@ -863,17 +856,17 @@
|
||||||
so they may later be changed. Deciding which, and implementing
|
so they may later be changed. Deciding which, and implementing
|
||||||
the decisions, must happen before you can reasonably document a
|
the decisions, must happen before you can reasonably document a
|
||||||
candidate C++ ABI that encompasses the standard library.
|
candidate C++ ABI that encompasses the standard library.
|
||||||
</p></td></tr><tr class="question" title="7.8."><td align="left" valign="top"><a id="faq.size_equals_capacity"></a><a id="q-size_equals_capacity"></a><p><b>7.8.</b></p></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="question" title="7.8."><td align="left" valign="top"><a id="faq.size_equals_capacity"/><a id="q-size_equals_capacity"/><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
|
||||||
How do I make std::vector<T>::capacity() == std::vector<T>::size?
|
How do I make std::vector<T>::capacity() == std::vector<T>::size?
|
||||||
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size_equals_capacity"></a></td><td align="left" valign="top"><p>
|
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size_equals_capacity"/></td><td align="left" valign="top"><p>
|
||||||
The standard idiom for deallocating a <code class="classname">vector<T></code>'s
|
The standard idiom for deallocating a <code class="classname">vector<T></code>'s
|
||||||
unused memory is to create a temporary copy of the vector and swap their
|
unused memory is to create a temporary copy of the vector and swap their
|
||||||
contents, e.g. for <code class="classname">vector<T> v</code>
|
contents, e.g. for <code class="classname">vector<T> v</code>
|
||||||
</p><div class="literallayout"><p><br />
|
</p><div class="literallayout"><p><br/>
|
||||||
std::vector<T>(v).swap(v);<br />
|
std::vector<T>(v).swap(v);<br/>
|
||||||
</p></div><p>
|
</p></div><p>
|
||||||
The copy will take O(n) time and the swap is constant time.
|
The copy will take O(n) time and the swap is constant time.
|
||||||
</p><p>
|
</p><p>
|
||||||
See <a class="link" href="manual/strings.html#strings.string.shrink" title="Shrink to Fit">Shrink-to-fit
|
See <a class="link" href="manual/strings.html#strings.string.shrink" title="Shrink to Fit">Shrink-to-fit
|
||||||
strings</a> for a similar solution for strings.
|
strings</a> for a similar solution for strings.
|
||||||
</p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
|
</p></td></tr></tbody></table></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk03.html">Up</a></td><td align="right"> </td></tr><tr><td align="left" valign="top"> </td><td align="center"><a accesskey="h" href="spine.html">Home</a></td><td align="right" valign="top"> </td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , ABI , version , dynamic , shared , compatibility " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , ABI , version , dynamic , shared , compatibility "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"/><link rel="prev" href="test.html" title="Test"/><link rel="next" href="api.html" title="API Evolution and Deprecation History"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
||||||
Porting and Maintenance
|
Porting and Maintenance
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="ABI Policy and Guidelines"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.abi"></a>ABI Policy and Guidelines</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr/></div><div class="section" title="ABI Policy and Guidelines"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.abi"/>ABI Policy and Guidelines</h2></div></div></div><p>
|
||||||
</p><div class="sect2" title="The C++ Interface"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"></a>The C++ Interface</h3></div></div></div><p>
|
</p><div class="section" title="The C++ Interface"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"/>The C++ Interface</h3></div></div></div><p>
|
||||||
C++ applications often depend on specific language support
|
C++ applications often depend on specific language support
|
||||||
routines, say for throwing exceptions, or catching exceptions, and
|
routines, say for throwing exceptions, or catching exceptions, and
|
||||||
perhaps also depend on features in the C++ Standard Library.
|
perhaps also depend on features in the C++ Standard Library.
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
virtual functions, etc. These details are defined as the compiler
|
virtual functions, etc. These details are defined as the compiler
|
||||||
Application Binary Interface, or ABI. The GNU C++ compiler uses an
|
Application Binary Interface, or ABI. The GNU C++ compiler uses an
|
||||||
industry-standard C++ ABI starting with version 3. Details can be
|
industry-standard C++ ABI starting with version 3. Details can be
|
||||||
found in the <a class="ulink" href="http://www.codesourcery.com/cxx-abi/abi.html" target="_top"> ABI
|
found in the <a class="link" href="http://www.codesourcery.com/public/cxx-abi/abi.html">ABI
|
||||||
specification</a>.
|
specification</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
The GNU C++ compiler, g++, has a compiler command line option to
|
The GNU C++ compiler, g++, has a compiler command line option to
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
g++ command line options may change the ABI as a side-effect of
|
g++ command line options may change the ABI as a side-effect of
|
||||||
use. Such flags include <code class="code">-fpack-struct</code> and
|
use. Such flags include <code class="code">-fpack-struct</code> and
|
||||||
<code class="code">-fno-exceptions</code>, but include others: see the complete
|
<code class="code">-fno-exceptions</code>, but include others: see the complete
|
||||||
list in the GCC manual under the heading <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options" target="_top">Options
|
list in the GCC manual under the heading <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options">Options
|
||||||
for Code Generation Conventions</a>.
|
for Code Generation Conventions</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
The configure options used when building a specific libstdc++
|
The configure options used when building a specific libstdc++
|
||||||
|
|
@ -58,10 +58,10 @@ given compiler ABI. In a nutshell:
|
||||||
To use a specific version of the C++ ABI, one must use a
|
To use a specific version of the C++ ABI, one must use a
|
||||||
corresponding GNU C++ toolchain (i.e., g++ and libstdc++) that
|
corresponding GNU C++ toolchain (i.e., g++ and libstdc++) that
|
||||||
implements the C++ ABI in question.
|
implements the C++ ABI in question.
|
||||||
</p></div><div class="sect2" title="Versioning"><div class="titlepage"><div><div><h3 class="title"><a id="abi.versioning"></a>Versioning</h3></div></div></div><p> The C++ interface has evolved throughout the history of the GNU
|
</p></div><div class="section" title="Versioning"><div class="titlepage"><div><div><h3 class="title"><a id="abi.versioning"/>Versioning</h3></div></div></div><p> The C++ interface has evolved throughout the history of the GNU
|
||||||
C++ toolchain. With each release, various details have been changed so
|
C++ toolchain. With each release, various details have been changed so
|
||||||
as to give distinct versions to the C++ interface.
|
as to give distinct versions to the C++ interface.
|
||||||
</p><div class="sect3" title="Goals"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.goals"></a>Goals</h4></div></div></div><p>Extending existing, stable ABIs. Versioning gives subsequent
|
</p><div class="section" title="Goals"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.goals"/>Goals</h4></div></div></div><p>Extending existing, stable ABIs. Versioning gives subsequent
|
||||||
releases of library binaries the ability to add new symbols and add
|
releases of library binaries the ability to add new symbols and add
|
||||||
functionality, all the while retaining compatibility with the previous
|
functionality, all the while retaining compatibility with the previous
|
||||||
releases in the series. Thus, program binaries linked with the initial
|
releases in the series. Thus, program binaries linked with the initial
|
||||||
|
|
@ -75,7 +75,7 @@ binary in a release series (with additional symbols added), substitute
|
||||||
in the initial release of the library binary, and remain link
|
in the initial release of the library binary, and remain link
|
||||||
compatible.
|
compatible.
|
||||||
</p><p>Allows multiple, incompatible ABIs to coexist at the same time.
|
</p><p>Allows multiple, incompatible ABIs to coexist at the same time.
|
||||||
</p></div><div class="sect3" title="History"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.history"></a>History</h4></div></div></div><p>
|
</p></div><div class="section" title="History"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.history"/>History</h4></div></div></div><p>
|
||||||
How can this complexity be managed? What does C++ versioning mean?
|
How can this complexity be managed? What does C++ versioning mean?
|
||||||
Because library and compiler changes often make binaries compiled
|
Because library and compiler changes often make binaries compiled
|
||||||
with one version of the GNU tools incompatible with binaries
|
with one version of the GNU tools incompatible with binaries
|
||||||
|
|
@ -84,12 +84,12 @@ compatible.
|
||||||
easier.
|
easier.
|
||||||
</p><p>
|
</p><p>
|
||||||
The following techniques are used:
|
The following techniques are used:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Release versioning on the libgcc_s.so binary. </p><p>This is implemented via file names and the ELF
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Release versioning on the libgcc_s.so binary. </p><p>This is implemented via file names and the ELF
|
||||||
<code class="constant">DT_SONAME</code> mechanism (at least on ELF
|
<code class="constant">DT_SONAME</code> mechanism (at least on ELF
|
||||||
systems). It is versioned as follows:
|
systems). It is versioned as follows:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.4: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.4: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1
|
||||||
when configuring <code class="code">--with-sjlj-exceptions</code>, or
|
when configuring <code class="code">--with-sjlj-exceptions</code>, or
|
||||||
libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-1].x: either libgcc_s.so.1
|
libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-1].x: either libgcc_s.so.1
|
||||||
when configuring <code class="code">--with-sjlj-exceptions</code>, or
|
when configuring <code class="code">--with-sjlj-exceptions</code>, or
|
||||||
libgcc_s.so.2 </p></li><li class="listitem"><p>gcc-4.[2-5].x: either libgcc_s.so.3 when configuring
|
libgcc_s.so.2 </p></li><li class="listitem"><p>gcc-4.[2-5].x: either libgcc_s.so.3 when configuring
|
||||||
<code class="code">--with-sjlj-exceptions</code>) or libgcc_s.so.4
|
<code class="code">--with-sjlj-exceptions</code>) or libgcc_s.so.4
|
||||||
|
|
@ -97,7 +97,7 @@ compatible.
|
||||||
definitions, where the version definition is the maximum for a
|
definitions, where the version definition is the maximum for a
|
||||||
particular release. Labels are cumulative. If a particular release
|
particular release. Labels are cumulative. If a particular release
|
||||||
is not listed, it has the same version labels as the preceding
|
is not listed, it has the same version labels as the preceding
|
||||||
release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: GCC_3.0</p></li><li class="listitem"><p>gcc-3.3.0: GCC_3.3</p></li><li class="listitem"><p>gcc-3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>gcc-3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>gcc-3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>gcc-3.4.0: GCC_3.4</p></li><li class="listitem"><p>gcc-3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>gcc-3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>gcc-4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>gcc-4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>gcc-4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>gcc-4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>gcc-4.4.0: GCC_4.4.0</p></li></ul></div></li><li class="listitem"><p>
|
release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: GCC_3.0</p></li><li class="listitem"><p>gcc-3.3.0: GCC_3.3</p></li><li class="listitem"><p>gcc-3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>gcc-3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>gcc-3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>gcc-3.4.0: GCC_3.4</p></li><li class="listitem"><p>gcc-3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>gcc-3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>gcc-4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>gcc-4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>gcc-4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>gcc-4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>gcc-4.4.0: GCC_4.4.0</p></li></ul></div></li><li class="listitem"><p>
|
||||||
Release versioning on the libstdc++.so binary, implemented in
|
Release versioning on the libstdc++.so binary, implemented in
|
||||||
the same way as the libgcc_s.so binary above. Listed is the
|
the same way as the libgcc_s.so binary above. Listed is the
|
||||||
filename: <code class="constant">DT_SONAME</code> can be deduced from
|
filename: <code class="constant">DT_SONAME</code> can be deduced from
|
||||||
|
|
@ -109,13 +109,13 @@ compatible.
|
||||||
the table below, releases incompatible with the previous
|
the table below, releases incompatible with the previous
|
||||||
one are explicitly noted.
|
one are explicitly noted.
|
||||||
</p><p>It is versioned as follows:
|
</p><p>It is versioned as follows:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>gcc-3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>gcc-3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>gcc-3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>gcc-3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>gcc-3.1.0: libstdc++.so.4.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.1.1: libstdc++.so.4.0.1</p></li><li class="listitem"><p>gcc-3.2.0: libstdc++.so.5.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.2.1: libstdc++.so.5.0.1</p></li><li class="listitem"><p>gcc-3.2.2: libstdc++.so.5.0.2</p></li><li class="listitem"><p>gcc-3.2.3: libstdc++.so.5.0.3 (See Note 2)</p></li><li class="listitem"><p>gcc-3.3.0: libstdc++.so.5.0.4</p></li><li class="listitem"><p>gcc-3.3.1: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.3.2: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.3.3: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.4.0: libstdc++.so.6.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.4.1: libstdc++.so.6.0.1</p></li><li class="listitem"><p>gcc-3.4.2: libstdc++.so.6.0.2</p></li><li class="listitem"><p>gcc-3.4.3: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.4: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.5: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.6: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-4.0.0: libstdc++.so.6.0.4</p></li><li class="listitem"><p>gcc-4.0.1: libstdc++.so.6.0.5</p></li><li class="listitem"><p>gcc-4.0.2: libstdc++.so.6.0.6</p></li><li class="listitem"><p>gcc-4.0.3: libstdc++.so.6.0.7</p></li><li class="listitem"><p>gcc-4.1.0: libstdc++.so.6.0.7</p></li><li class="listitem"><p>gcc-4.1.1: libstdc++.so.6.0.8</p></li><li class="listitem"><p>gcc-4.1.2: libstdc++.so.6.0.8</p></li><li class="listitem"><p>gcc-4.2.0: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.1: libstdc++.so.6.0.9 (See Note 3)</p></li><li class="listitem"><p>gcc-4.2.2: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.3: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.4: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.3.0: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.1: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.2: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.3: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.4: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.4.0: libstdc++.so.6.0.11</p></li><li class="listitem"><p>gcc-4.4.1: libstdc++.so.6.0.12</p></li><li class="listitem"><p>gcc-4.4.2: libstdc++.so.6.0.13</p></li><li class="listitem"><p>gcc-4.5.0: libstdc++.so.6.0.14</p></li></ul></div><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>gcc-3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>gcc-3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>gcc-3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>gcc-3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>gcc-3.1.0: libstdc++.so.4.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.1.1: libstdc++.so.4.0.1</p></li><li class="listitem"><p>gcc-3.2.0: libstdc++.so.5.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.2.1: libstdc++.so.5.0.1</p></li><li class="listitem"><p>gcc-3.2.2: libstdc++.so.5.0.2</p></li><li class="listitem"><p>gcc-3.2.3: libstdc++.so.5.0.3 (See Note 2)</p></li><li class="listitem"><p>gcc-3.3.0: libstdc++.so.5.0.4</p></li><li class="listitem"><p>gcc-3.3.1: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.3.2: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.3.3: libstdc++.so.5.0.5</p></li><li class="listitem"><p>gcc-3.4.0: libstdc++.so.6.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>gcc-3.4.1: libstdc++.so.6.0.1</p></li><li class="listitem"><p>gcc-3.4.2: libstdc++.so.6.0.2</p></li><li class="listitem"><p>gcc-3.4.3: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.4: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.5: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-3.4.6: libstdc++.so.6.0.3</p></li><li class="listitem"><p>gcc-4.0.0: libstdc++.so.6.0.4</p></li><li class="listitem"><p>gcc-4.0.1: libstdc++.so.6.0.5</p></li><li class="listitem"><p>gcc-4.0.2: libstdc++.so.6.0.6</p></li><li class="listitem"><p>gcc-4.0.3: libstdc++.so.6.0.7</p></li><li class="listitem"><p>gcc-4.1.0: libstdc++.so.6.0.7</p></li><li class="listitem"><p>gcc-4.1.1: libstdc++.so.6.0.8</p></li><li class="listitem"><p>gcc-4.1.2: libstdc++.so.6.0.8</p></li><li class="listitem"><p>gcc-4.2.0: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.1: libstdc++.so.6.0.9 (See Note 3)</p></li><li class="listitem"><p>gcc-4.2.2: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.3: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.2.4: libstdc++.so.6.0.9</p></li><li class="listitem"><p>gcc-4.3.0: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.1: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.2: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.3: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.3.4: libstdc++.so.6.0.10</p></li><li class="listitem"><p>gcc-4.4.0: libstdc++.so.6.0.11</p></li><li class="listitem"><p>gcc-4.4.1: libstdc++.so.6.0.12</p></li><li class="listitem"><p>gcc-4.4.2: libstdc++.so.6.0.13</p></li><li class="listitem"><p>gcc-4.5.0: libstdc++.so.6.0.14</p></li></ul></div><p>
|
||||||
Note 1: Error should be libstdc++.so.3.0.3.
|
Note 1: Error should be libstdc++.so.3.0.3.
|
||||||
</p><p>
|
</p><p>
|
||||||
Note 2: Not strictly required.
|
Note 2: Not strictly required.
|
||||||
</p><p>
|
</p><p>
|
||||||
Note 3: This release (but not previous or subsequent) has one
|
Note 3: This release (but not previous or subsequent) has one
|
||||||
known incompatibility, see <a class="ulink" href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678" target="_top">33678</a>
|
known incompatibility, see <a class="link" href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678">33678</a>
|
||||||
in the GCC bug database.
|
in the GCC bug database.
|
||||||
</p></li><li class="listitem"><p>Symbol versioning on the libstdc++.so binary.</p><p>mapfile: libstdc++-v3/config/abi/pre/gnu.ver</p><p>It is versioned with the following labels and version
|
</p></li><li class="listitem"><p>Symbol versioning on the libstdc++.so binary.</p><p>mapfile: libstdc++-v3/config/abi/pre/gnu.ver</p><p>It is versioned with the following labels and version
|
||||||
definitions, where the version definition is the maximum for a
|
definitions, where the version definition is the maximum for a
|
||||||
|
|
@ -127,7 +127,7 @@ compatible.
|
||||||
GLIBCPP_3.2 for symbols that were introduced in the gcc-3.2.0
|
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
|
release.) If a particular release is not listed, it has the same
|
||||||
version labels as the preceding release.
|
version labels as the preceding release.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>gcc-3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>gcc-3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>gcc-3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>gcc-3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>gcc-3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>gcc-4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>gcc-4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>gcc-4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>gcc-4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>gcc-4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>gcc-4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>gcc-4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>gcc-4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>gcc-3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>gcc-3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>gcc-3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>gcc-3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>gcc-3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>gcc-3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>gcc-3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>gcc-3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>gcc-4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>gcc-4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>gcc-4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>gcc-4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>gcc-4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>gcc-4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>gcc-4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>gcc-4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>gcc-4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
|
||||||
__GXX_ABI_VERSION. This macro is defined as the version of the
|
__GXX_ABI_VERSION. This macro is defined as the version of the
|
||||||
compiler v3 ABI, with g++ 3.0.x being version 100. This macro will
|
compiler v3 ABI, with g++ 3.0.x being version 100. This macro will
|
||||||
be automatically defined whenever g++ is used (the curious can
|
be automatically defined whenever g++ is used (the curious can
|
||||||
|
|
@ -139,11 +139,11 @@ compatible.
|
||||||
'-fabi-version' command line option.
|
'-fabi-version' command line option.
|
||||||
</p><p>
|
</p><p>
|
||||||
It is versioned as follows, where 'n' is given by '-fabi-version=n':
|
It is versioned as follows, where 'n' is given by '-fabi-version=n':
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.x: 100</p></li><li class="listitem"><p>gcc-3.1.x: 100 (Error, should be 101)</p></li><li class="listitem"><p>gcc-3.2.x: 102</p></li><li class="listitem"><p>gcc-3.3.x: 102</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 102 (when n=1)</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 1000 + n (when n>1) </p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 999999 (when n=0)</p></li></ul></div><p></p></li><li class="listitem"><p>Changes to the default compiler option for
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.x: 100</p></li><li class="listitem"><p>gcc-3.1.x: 100 (Error, should be 101)</p></li><li class="listitem"><p>gcc-3.2.x: 102</p></li><li class="listitem"><p>gcc-3.3.x: 102</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 102 (when n=1)</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 1000 + n (when n>1) </p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: 999999 (when n=0)</p></li></ul></div><p/></li><li class="listitem"><p>Changes to the default compiler option for
|
||||||
<code class="code">-fabi-version</code>.
|
<code class="code">-fabi-version</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
It is versioned as follows:
|
It is versioned as follows:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.x: (Error, not versioned) </p></li><li class="listitem"><p>gcc-3.1.x: (Error, not versioned) </p></li><li class="listitem"><p>gcc-3.2.x: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>gcc-3.3.x: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: <code class="code">-fabi-version=2</code> <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li></ul></div><p></p></li><li class="listitem"><p>Incremental bumping of a library pre-defined macro. For releases
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.x: (Error, not versioned) </p></li><li class="listitem"><p>gcc-3.1.x: (Error, not versioned) </p></li><li class="listitem"><p>gcc-3.2.x: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>gcc-3.3.x: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: <code class="code">-fabi-version=2</code> <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li></ul></div><p/></li><li class="listitem"><p>Incremental bumping of a library pre-defined macro. For releases
|
||||||
before 3.4.0, the macro is __GLIBCPP__. For later releases, it's
|
before 3.4.0, the macro is __GLIBCPP__. For later releases, it's
|
||||||
__GLIBCXX__. (The libstdc++ project generously changed from CPP to
|
__GLIBCXX__. (The libstdc++ project generously changed from CPP to
|
||||||
CXX throughout its source to allow the "C" pre-processor the CPP
|
CXX throughout its source to allow the "C" pre-processor the CPP
|
||||||
|
|
@ -156,7 +156,7 @@ compatible.
|
||||||
the same value as gcc/DATESTAMP.)
|
the same value as gcc/DATESTAMP.)
|
||||||
</p><p>
|
</p><p>
|
||||||
It is versioned as follows:
|
It is versioned as follows:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: 20010615</p></li><li class="listitem"><p>gcc-3.0.1: 20010819</p></li><li class="listitem"><p>gcc-3.0.2: 20011023</p></li><li class="listitem"><p>gcc-3.0.3: 20011220</p></li><li class="listitem"><p>gcc-3.0.4: 20020220</p></li><li class="listitem"><p>gcc-3.1.0: 20020514</p></li><li class="listitem"><p>gcc-3.1.1: 20020725</p></li><li class="listitem"><p>gcc-3.2.0: 20020814</p></li><li class="listitem"><p>gcc-3.2.1: 20021119</p></li><li class="listitem"><p>gcc-3.2.2: 20030205</p></li><li class="listitem"><p>gcc-3.2.3: 20030422</p></li><li class="listitem"><p>gcc-3.3.0: 20030513</p></li><li class="listitem"><p>gcc-3.3.1: 20030804</p></li><li class="listitem"><p>gcc-3.3.2: 20031016</p></li><li class="listitem"><p>gcc-3.3.3: 20040214</p></li><li class="listitem"><p>gcc-3.4.0: 20040419</p></li><li class="listitem"><p>gcc-3.4.1: 20040701</p></li><li class="listitem"><p>gcc-3.4.2: 20040906</p></li><li class="listitem"><p>gcc-3.4.3: 20041105</p></li><li class="listitem"><p>gcc-3.4.4: 20050519</p></li><li class="listitem"><p>gcc-3.4.5: 20051201</p></li><li class="listitem"><p>gcc-3.4.6: 20060306</p></li><li class="listitem"><p>gcc-4.0.0: 20050421</p></li><li class="listitem"><p>gcc-4.0.1: 20050707</p></li><li class="listitem"><p>gcc-4.0.2: 20050921</p></li><li class="listitem"><p>gcc-4.0.3: 20060309</p></li><li class="listitem"><p>gcc-4.1.0: 20060228</p></li><li class="listitem"><p>gcc-4.1.1: 20060524</p></li><li class="listitem"><p>gcc-4.1.2: 20070214</p></li><li class="listitem"><p>gcc-4.2.0: 20070514</p></li><li class="listitem"><p>gcc-4.2.1: 20070719</p></li><li class="listitem"><p>gcc-4.2.2: 20071007</p></li><li class="listitem"><p>gcc-4.2.3: 20080201</p></li><li class="listitem"><p>gcc-4.2.4: 20080519</p></li><li class="listitem"><p>gcc-4.3.0: 20080306</p></li><li class="listitem"><p>gcc-4.3.1: 20080606</p></li><li class="listitem"><p>gcc-4.3.2: 20080827</p></li><li class="listitem"><p>gcc-4.3.3: 20090124</p></li><li class="listitem"><p>gcc-4.4.0: 20090421</p></li><li class="listitem"><p>gcc-4.4.1: 20090722</p></li><li class="listitem"><p>gcc-4.4.2: 20091015</p></li></ul></div><p></p></li><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: 20010615</p></li><li class="listitem"><p>gcc-3.0.1: 20010819</p></li><li class="listitem"><p>gcc-3.0.2: 20011023</p></li><li class="listitem"><p>gcc-3.0.3: 20011220</p></li><li class="listitem"><p>gcc-3.0.4: 20020220</p></li><li class="listitem"><p>gcc-3.1.0: 20020514</p></li><li class="listitem"><p>gcc-3.1.1: 20020725</p></li><li class="listitem"><p>gcc-3.2.0: 20020814</p></li><li class="listitem"><p>gcc-3.2.1: 20021119</p></li><li class="listitem"><p>gcc-3.2.2: 20030205</p></li><li class="listitem"><p>gcc-3.2.3: 20030422</p></li><li class="listitem"><p>gcc-3.3.0: 20030513</p></li><li class="listitem"><p>gcc-3.3.1: 20030804</p></li><li class="listitem"><p>gcc-3.3.2: 20031016</p></li><li class="listitem"><p>gcc-3.3.3: 20040214</p></li><li class="listitem"><p>gcc-3.4.0: 20040419</p></li><li class="listitem"><p>gcc-3.4.1: 20040701</p></li><li class="listitem"><p>gcc-3.4.2: 20040906</p></li><li class="listitem"><p>gcc-3.4.3: 20041105</p></li><li class="listitem"><p>gcc-3.4.4: 20050519</p></li><li class="listitem"><p>gcc-3.4.5: 20051201</p></li><li class="listitem"><p>gcc-3.4.6: 20060306</p></li><li class="listitem"><p>gcc-4.0.0: 20050421</p></li><li class="listitem"><p>gcc-4.0.1: 20050707</p></li><li class="listitem"><p>gcc-4.0.2: 20050921</p></li><li class="listitem"><p>gcc-4.0.3: 20060309</p></li><li class="listitem"><p>gcc-4.1.0: 20060228</p></li><li class="listitem"><p>gcc-4.1.1: 20060524</p></li><li class="listitem"><p>gcc-4.1.2: 20070214</p></li><li class="listitem"><p>gcc-4.2.0: 20070514</p></li><li class="listitem"><p>gcc-4.2.1: 20070719</p></li><li class="listitem"><p>gcc-4.2.2: 20071007</p></li><li class="listitem"><p>gcc-4.2.3: 20080201</p></li><li class="listitem"><p>gcc-4.2.4: 20080519</p></li><li class="listitem"><p>gcc-4.3.0: 20080306</p></li><li class="listitem"><p>gcc-4.3.1: 20080606</p></li><li class="listitem"><p>gcc-4.3.2: 20080827</p></li><li class="listitem"><p>gcc-4.3.3: 20090124</p></li><li class="listitem"><p>gcc-4.4.0: 20090421</p></li><li class="listitem"><p>gcc-4.4.1: 20090722</p></li><li class="listitem"><p>gcc-4.4.2: 20091015</p></li></ul></div><p/></li><li class="listitem"><p>
|
||||||
Incremental bumping of a library pre-defined macro,
|
Incremental bumping of a library pre-defined macro,
|
||||||
_GLIBCPP_VERSION. This macro is defined as the released version of
|
_GLIBCPP_VERSION. This macro is defined as the released version of
|
||||||
the library, as a string literal. This is only implemented in
|
the library, as a string literal. This is only implemented in
|
||||||
|
|
@ -169,7 +169,7 @@ compatible.
|
||||||
of config.h.
|
of config.h.
|
||||||
</p><p>
|
</p><p>
|
||||||
It is versioned as follows:
|
It is versioned as follows:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: "3.0.0"</p></li><li class="listitem"><p>gcc-3.0.1: "3.0.0" (Error, should be "3.0.1")</p></li><li class="listitem"><p>gcc-3.0.2: "3.0.0" (Error, should be "3.0.2")</p></li><li class="listitem"><p>gcc-3.0.3: "3.0.0" (Error, should be "3.0.3")</p></li><li class="listitem"><p>gcc-3.0.4: "3.0.0" (Error, should be "3.0.4")</p></li><li class="listitem"><p>gcc-3.1.0: "3.1.0"</p></li><li class="listitem"><p>gcc-3.1.1: "3.1.1"</p></li><li class="listitem"><p>gcc-3.2.0: "3.2"</p></li><li class="listitem"><p>gcc-3.2.1: "3.2.1"</p></li><li class="listitem"><p>gcc-3.2.2: "3.2.2"</p></li><li class="listitem"><p>gcc-3.2.3: "3.2.3"</p></li><li class="listitem"><p>gcc-3.3.0: "3.3"</p></li><li class="listitem"><p>gcc-3.3.1: "3.3.1"</p></li><li class="listitem"><p>gcc-3.3.2: "3.3.2"</p></li><li class="listitem"><p>gcc-3.3.3: "3.3.3"</p></li><li class="listitem"><p>gcc-3.4.x: "version-unused"</p></li><li class="listitem"><p>gcc-4.[0-5].x: "version-unused"</p></li></ul></div><p></p></li><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: "3.0.0"</p></li><li class="listitem"><p>gcc-3.0.1: "3.0.0" (Error, should be "3.0.1")</p></li><li class="listitem"><p>gcc-3.0.2: "3.0.0" (Error, should be "3.0.2")</p></li><li class="listitem"><p>gcc-3.0.3: "3.0.0" (Error, should be "3.0.3")</p></li><li class="listitem"><p>gcc-3.0.4: "3.0.0" (Error, should be "3.0.4")</p></li><li class="listitem"><p>gcc-3.1.0: "3.1.0"</p></li><li class="listitem"><p>gcc-3.1.1: "3.1.1"</p></li><li class="listitem"><p>gcc-3.2.0: "3.2"</p></li><li class="listitem"><p>gcc-3.2.1: "3.2.1"</p></li><li class="listitem"><p>gcc-3.2.2: "3.2.2"</p></li><li class="listitem"><p>gcc-3.2.3: "3.2.3"</p></li><li class="listitem"><p>gcc-3.3.0: "3.3"</p></li><li class="listitem"><p>gcc-3.3.1: "3.3.1"</p></li><li class="listitem"><p>gcc-3.3.2: "3.3.2"</p></li><li class="listitem"><p>gcc-3.3.3: "3.3.3"</p></li><li class="listitem"><p>gcc-3.4.x: "version-unused"</p></li><li class="listitem"><p>gcc-4.[0-5].x: "version-unused"</p></li></ul></div><p/></li><li class="listitem"><p>
|
||||||
Matching each specific C++ compiler release to a specific set of
|
Matching each specific C++ compiler release to a specific set of
|
||||||
C++ include files. This is only implemented in gcc-3.1.1 releases
|
C++ include files. This is only implemented in gcc-3.1.1 releases
|
||||||
and higher.
|
and higher.
|
||||||
|
|
@ -181,13 +181,13 @@ compatible.
|
||||||
file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before gcc-3.4.0).
|
file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before gcc-3.4.0).
|
||||||
</p><p>
|
</p><p>
|
||||||
C++ includes are versioned as follows:
|
C++ includes are versioned as follows:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.1: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.2: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.3: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.4: include/g++-v3</p></li><li class="listitem"><p>gcc-3.1.0: include/g++-v3</p></li><li class="listitem"><p>gcc-3.1.1: include/c++/3.1.1</p></li><li class="listitem"><p>gcc-3.2.0: include/c++/3.2</p></li><li class="listitem"><p>gcc-3.2.1: include/c++/3.2.1</p></li><li class="listitem"><p>gcc-3.2.2: include/c++/3.2.2</p></li><li class="listitem"><p>gcc-3.2.3: include/c++/3.2.3</p></li><li class="listitem"><p>gcc-3.3.0: include/c++/3.3</p></li><li class="listitem"><p>gcc-3.3.1: include/c++/3.3.1</p></li><li class="listitem"><p>gcc-3.3.2: include/c++/3.3.2</p></li><li class="listitem"><p>gcc-3.3.3: include/c++/3.3.3</p></li><li class="listitem"><p>gcc-3.4.0: include/c++/3.4.0</p></li><li class="listitem"><p>gcc-3.4.1: include/c++/3.4.1</p></li><li class="listitem"><p>gcc-3.4.2: include/c++/3.4.2</p></li><li class="listitem"><p>gcc-3.4.3: include/c++/3.4.3</p></li><li class="listitem"><p>gcc-3.4.4: include/c++/3.4.4</p></li><li class="listitem"><p>gcc-3.4.5: include/c++/3.4.5</p></li><li class="listitem"><p>gcc-3.4.6: include/c++/3.4.6</p></li><li class="listitem"><p>gcc-4.0.0: include/c++/4.0.0</p></li><li class="listitem"><p>gcc-4.0.1: include/c++/4.0.1</p></li><li class="listitem"><p>gcc-4.0.2: include/c++/4.0.2</p></li><li class="listitem"><p>gcc-4.0.3: include/c++/4.0.3</p></li><li class="listitem"><p>gcc-4.1.0: include/c++/4.1.0</p></li><li class="listitem"><p>gcc-4.1.1: include/c++/4.1.1</p></li><li class="listitem"><p>gcc-4.1.2: include/c++/4.1.2</p></li><li class="listitem"><p>gcc-4.2.0: include/c++/4.2.0</p></li><li class="listitem"><p>gcc-4.2.1: include/c++/4.2.1</p></li><li class="listitem"><p>gcc-4.2.2: include/c++/4.2.2</p></li><li class="listitem"><p>gcc-4.2.3: include/c++/4.2.3</p></li><li class="listitem"><p>gcc-4.2.4: include/c++/4.2.4</p></li><li class="listitem"><p>gcc-4.3.0: include/c++/4.3.0</p></li><li class="listitem"><p>gcc-4.3.1: include/c++/4.3.1</p></li><li class="listitem"><p>gcc-4.3.3: include/c++/4.3.3</p></li><li class="listitem"><p>gcc-4.3.4: include/c++/4.3.4</p></li><li class="listitem"><p>gcc-4.4.0: include/c++/4.4.0</p></li><li class="listitem"><p>gcc-4.4.1: include/c++/4.4.1</p></li><li class="listitem"><p>gcc-4.4.2: include/c++/4.4.2</p></li><li class="listitem"><p>gcc-4.5.0: include/c++/4.5.0</p></li></ul></div><p></p></li></ol></div><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>gcc-3.0.0: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.1: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.2: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.3: include/g++-v3</p></li><li class="listitem"><p>gcc-3.0.4: include/g++-v3</p></li><li class="listitem"><p>gcc-3.1.0: include/g++-v3</p></li><li class="listitem"><p>gcc-3.1.1: include/c++/3.1.1</p></li><li class="listitem"><p>gcc-3.2.0: include/c++/3.2</p></li><li class="listitem"><p>gcc-3.2.1: include/c++/3.2.1</p></li><li class="listitem"><p>gcc-3.2.2: include/c++/3.2.2</p></li><li class="listitem"><p>gcc-3.2.3: include/c++/3.2.3</p></li><li class="listitem"><p>gcc-3.3.0: include/c++/3.3</p></li><li class="listitem"><p>gcc-3.3.1: include/c++/3.3.1</p></li><li class="listitem"><p>gcc-3.3.2: include/c++/3.3.2</p></li><li class="listitem"><p>gcc-3.3.3: include/c++/3.3.3</p></li><li class="listitem"><p>gcc-3.4.0: include/c++/3.4.0</p></li><li class="listitem"><p>gcc-3.4.1: include/c++/3.4.1</p></li><li class="listitem"><p>gcc-3.4.2: include/c++/3.4.2</p></li><li class="listitem"><p>gcc-3.4.3: include/c++/3.4.3</p></li><li class="listitem"><p>gcc-3.4.4: include/c++/3.4.4</p></li><li class="listitem"><p>gcc-3.4.5: include/c++/3.4.5</p></li><li class="listitem"><p>gcc-3.4.6: include/c++/3.4.6</p></li><li class="listitem"><p>gcc-4.0.0: include/c++/4.0.0</p></li><li class="listitem"><p>gcc-4.0.1: include/c++/4.0.1</p></li><li class="listitem"><p>gcc-4.0.2: include/c++/4.0.2</p></li><li class="listitem"><p>gcc-4.0.3: include/c++/4.0.3</p></li><li class="listitem"><p>gcc-4.1.0: include/c++/4.1.0</p></li><li class="listitem"><p>gcc-4.1.1: include/c++/4.1.1</p></li><li class="listitem"><p>gcc-4.1.2: include/c++/4.1.2</p></li><li class="listitem"><p>gcc-4.2.0: include/c++/4.2.0</p></li><li class="listitem"><p>gcc-4.2.1: include/c++/4.2.1</p></li><li class="listitem"><p>gcc-4.2.2: include/c++/4.2.2</p></li><li class="listitem"><p>gcc-4.2.3: include/c++/4.2.3</p></li><li class="listitem"><p>gcc-4.2.4: include/c++/4.2.4</p></li><li class="listitem"><p>gcc-4.3.0: include/c++/4.3.0</p></li><li class="listitem"><p>gcc-4.3.1: include/c++/4.3.1</p></li><li class="listitem"><p>gcc-4.3.3: include/c++/4.3.3</p></li><li class="listitem"><p>gcc-4.3.4: include/c++/4.3.4</p></li><li class="listitem"><p>gcc-4.4.0: include/c++/4.4.0</p></li><li class="listitem"><p>gcc-4.4.1: include/c++/4.4.1</p></li><li class="listitem"><p>gcc-4.4.2: include/c++/4.4.2</p></li><li class="listitem"><p>gcc-4.5.0: include/c++/4.5.0</p></li></ul></div><p/></li></ol></div><p>
|
||||||
Taken together, these techniques can accurately specify interface
|
Taken together, these techniques can accurately specify interface
|
||||||
and implementation changes in the GNU C++ tools themselves. Used
|
and implementation changes in the GNU C++ tools themselves. Used
|
||||||
properly, they allow both the GNU C++ tools implementation, and
|
properly, they allow both the GNU C++ tools implementation, and
|
||||||
programs using them, an evolving yet controlled development that
|
programs using them, an evolving yet controlled development that
|
||||||
maintains backward compatibility.
|
maintains backward compatibility.
|
||||||
</p></div><div class="sect3" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"></a>Prerequisites</h4></div></div></div><p>
|
</p></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"/>Prerequisites</h4></div></div></div><p>
|
||||||
Minimum environment that supports a versioned ABI: A supported
|
Minimum environment that supports a versioned ABI: A supported
|
||||||
dynamic linker, a GNU linker of sufficient vintage to understand
|
dynamic linker, a GNU linker of sufficient vintage to understand
|
||||||
demangled C++ name globbing (ld) or the Sun linker, a shared
|
demangled C++ name globbing (ld) or the Sun linker, a shared
|
||||||
|
|
@ -202,7 +202,7 @@ compatible.
|
||||||
Most modern Linux and BSD versions, particularly ones using
|
Most modern Linux and BSD versions, particularly ones using
|
||||||
gcc-3.1.x tools and more recent vintages, will meet the
|
gcc-3.1.x tools and more recent vintages, will meet the
|
||||||
requirements above, as does Solaris 2.5 and up.
|
requirements above, as does Solaris 2.5 and up.
|
||||||
</p></div><div class="sect3" title="Configuring"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"></a>Configuring</h4></div></div></div><p>
|
</p></div><div class="section" title="Configuring"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"/>Configuring</h4></div></div></div><p>
|
||||||
It turns out that most of the configure options that change
|
It turns out that most of the configure options that change
|
||||||
default behavior will impact the mangled names of exported
|
default behavior will impact the mangled names of exported
|
||||||
symbols, and thus impact versioning and compatibility.
|
symbols, and thus impact versioning and compatibility.
|
||||||
|
|
@ -220,7 +220,7 @@ compatible.
|
||||||
attempts to make sure that all the requirement for symbol
|
attempts to make sure that all the requirement for symbol
|
||||||
versioning are in place. For more information, please consult
|
versioning are in place. For more information, please consult
|
||||||
acinclude.m4.
|
acinclude.m4.
|
||||||
</p></div><div class="sect3" title="Checking Active"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.active"></a>Checking Active</h4></div></div></div><p>
|
</p></div><div class="section" title="Checking Active"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.active"/>Checking Active</h4></div></div></div><p>
|
||||||
When the GNU C++ library is being built with symbol versioning
|
When the GNU C++ library is being built with symbol versioning
|
||||||
on, you should see the following at configure time for
|
on, you should see the following at configure time for
|
||||||
libstdc++:
|
libstdc++:
|
||||||
|
|
@ -268,16 +268,16 @@ On Solaris 2, you can use <code class="code">pvs -r</code> instead:
|
||||||
libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);
|
libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);
|
||||||
</pre><p>
|
</pre><p>
|
||||||
<code class="code">ldd -v</code> works too, but is very verbose.
|
<code class="code">ldd -v</code> works too, but is very verbose.
|
||||||
</p></div></div><div class="sect2" title="Allowed Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"></a>Allowed Changes</h3></div></div></div><p>
|
</p></div></div><div class="section" title="Allowed Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"/>Allowed Changes</h3></div></div></div><p>
|
||||||
The following will cause the library minor version number to
|
The following will cause the library minor version number to
|
||||||
increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
|
increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Adding an exported global or static data member</p></li><li class="listitem"><p>Adding an exported function, static or non-virtual member function</p></li><li class="listitem"><p>Adding an exported symbol or symbols by additional instantiations</p></li></ol></div><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Adding an exported global or static data member</p></li><li class="listitem"><p>Adding an exported function, static or non-virtual member function</p></li><li class="listitem"><p>Adding an exported symbol or symbols by additional instantiations</p></li></ol></div><p>
|
||||||
Other allowed changes are possible.
|
Other allowed changes are possible.
|
||||||
</p></div><div class="sect2" title="Prohibited Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_no"></a>Prohibited Changes</h3></div></div></div><p>
|
</p></div><div class="section" title="Prohibited Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_no"/>Prohibited Changes</h3></div></div></div><p>
|
||||||
The following non-exhaustive list will cause the library major version
|
The following non-exhaustive list will cause the library major version
|
||||||
number to increase, say from "libstdc++.so.3.0.4" to
|
number to increase, say from "libstdc++.so.3.0.4" to
|
||||||
"libstdc++.so.4.0.0".
|
"libstdc++.so.4.0.0".
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Changes in the gcc/g++ compiler ABI</p></li><li class="listitem"><p>Changing size of an exported symbol</p></li><li class="listitem"><p>Changing alignment of an exported symbol</p></li><li class="listitem"><p>Changing the layout of an exported symbol</p></li><li class="listitem"><p>Changing mangling on an exported symbol</p></li><li class="listitem"><p>Deleting an exported symbol</p></li><li class="listitem"><p>Changing the inheritance properties of a type by adding or removing
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Changes in the gcc/g++ compiler ABI</p></li><li class="listitem"><p>Changing size of an exported symbol</p></li><li class="listitem"><p>Changing alignment of an exported symbol</p></li><li class="listitem"><p>Changing the layout of an exported symbol</p></li><li class="listitem"><p>Changing mangling on an exported symbol</p></li><li class="listitem"><p>Deleting an exported symbol</p></li><li class="listitem"><p>Changing the inheritance properties of a type by adding or removing
|
||||||
base classes</p></li><li class="listitem"><p>
|
base classes</p></li><li class="listitem"><p>
|
||||||
Changing the size, alignment, or layout of types
|
Changing the size, alignment, or layout of types
|
||||||
specified in the C++ standard. These may not necessarily be
|
specified in the C++ standard. These may not necessarily be
|
||||||
|
|
@ -288,9 +288,11 @@ number to increase, say from "libstdc++.so.3.0.4" to
|
||||||
class that would otherwise have implicit versions. This will change
|
class that would otherwise have implicit versions. This will change
|
||||||
the way the compiler deals with this class in by-value return
|
the way the compiler deals with this class in by-value return
|
||||||
statements or parameters: instead of passing instances of this
|
statements or parameters: instead of passing instances of this
|
||||||
class in registers, the compiler will be forced to use memory. See <a class="ulink" href="http://www.codesourcery.com/cxx-abi/abi.html#calls" target="_top"> this part</a>
|
class in registers, the compiler will be forced to use memory. See the
|
||||||
|
section on <a class="link" href="http://www.codesourcery.com/public/cxx-abi/abi.html#calls">Function
|
||||||
|
Calling Conventions and APIs</a>
|
||||||
of the C++ ABI documentation for further details.
|
of the C++ ABI documentation for further details.
|
||||||
</p></li></ol></div></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"></a>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p></li></ol></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"/>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
Separation of interface and implementation
|
Separation of interface and implementation
|
||||||
</p><p>
|
</p><p>
|
||||||
This is accomplished by two techniques that separate the API from
|
This is accomplished by two techniques that separate the API from
|
||||||
|
|
@ -338,7 +340,7 @@ exceptional symbols are allowed to be visible.</p></dd><dt><span class="term"><c
|
||||||
<code class="code">CXXABI</code>, select items are allowed to be visible.</p></dd></dl></div><p>
|
<code class="code">CXXABI</code>, select items are allowed to be visible.</p></dd></dl></div><p>
|
||||||
</p></li><li class="listitem"><p>Freezing the API</p><p>Disallowed changes, as above, are not made on a stable release
|
</p></li><li class="listitem"><p>Freezing the API</p><p>Disallowed changes, as above, are not made on a stable release
|
||||||
branch. Enforcement tends to be less strict with GNU extensions that
|
branch. Enforcement tends to be less strict with GNU extensions that
|
||||||
standard includes.</p></li></ol></div></div><div class="sect2" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="abi.testing"></a>Testing</h3></div></div></div><div class="sect3" title="Single ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.single"></a>Single ABI Testing</h4></div></div></div><p>
|
standard includes.</p></li></ol></div></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="abi.testing"/>Testing</h3></div></div></div><div class="section" title="Single ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.single"/>Single ABI Testing</h4></div></div></div><p>
|
||||||
Testing for GNU C++ ABI changes is composed of two distinct
|
Testing for GNU C++ ABI changes is composed of two distinct
|
||||||
areas: testing the C++ compiler (g++) for compiler changes, and
|
areas: testing the C++ compiler (g++) for compiler changes, and
|
||||||
testing the C++ library (libstdc++) for library changes.
|
testing the C++ library (libstdc++) for library changes.
|
||||||
|
|
@ -404,7 +406,7 @@ and other detailed data is not displayed with this flag.
|
||||||
</p><p>
|
</p><p>
|
||||||
Perhaps there are other C++ ABI checkers. If so, please notify
|
Perhaps there are other C++ ABI checkers. If so, please notify
|
||||||
us. We'd like to know about them!
|
us. We'd like to know about them!
|
||||||
</p></div><div class="sect3" title="Multiple ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"></a>Multiple ABI Testing</h4></div></div></div><p>
|
</p></div><div class="section" title="Multiple ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"/>Multiple ABI Testing</h4></div></div></div><p>
|
||||||
A "C" application, dynamically linked to two shared libraries, liba,
|
A "C" application, dynamically linked to two shared libraries, liba,
|
||||||
libb. The dependent library liba is a C++ shared library compiled with
|
libb. The dependent library liba is a C++ shared library compiled with
|
||||||
gcc-3.3.x, and uses io, exceptions, locale, etc. The dependent library
|
gcc-3.3.x, and uses io, exceptions, locale, etc. The dependent library
|
||||||
|
|
@ -467,7 +469,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
|
This resulting binary, when executed, will be able to safely use
|
||||||
code from both liba, and the dependent libstdc++.so.6, and libb,
|
code from both liba, and the dependent libstdc++.so.6, and libb,
|
||||||
with the dependent libstdc++.so.5.
|
with the dependent libstdc++.so.5.
|
||||||
</p></div></div><div class="sect2" title="Outstanding Issues"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"></a>Outstanding Issues</h3></div></div></div><p>
|
</p></div></div><div class="section" title="Outstanding Issues"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"/>Outstanding Issues</h3></div></div></div><p>
|
||||||
Some features in the C++ language make versioning especially
|
Some features in the C++ language make versioning especially
|
||||||
difficult. In particular, compiler generated constructs such as
|
difficult. In particular, compiler generated constructs such as
|
||||||
implicit instantiations for templates, typeinfo information, and
|
implicit instantiations for templates, typeinfo information, and
|
||||||
|
|
@ -477,74 +479,44 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
|
||||||
</p><p>
|
</p><p>
|
||||||
For more background on this issue, see these bugzilla entries:
|
For more background on this issue, see these bugzilla entries:
|
||||||
</p><p>
|
</p><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/PR24660" target="_top">24660: versioning weak symbols in libstdc++</a>
|
<a class="link" href="http://gcc.gnu.org/PR24660">24660: versioning weak symbols in libstdc++</a>
|
||||||
</p><p>
|
</p><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/PR19664" target="_top">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
|
<a class="link" href="http://gcc.gnu.org/PR19664">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
|
||||||
</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id396917"></a><p><span class="biblioid">
|
</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"/>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id504414"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://abicheck.sourceforge.net/" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
ABIcheck, a vague idea of checking ABI compatibility
|
||||||
ABIcheck, a vague idea of checking ABI compatibility
|
</em>. </span></p></div><div class="biblioentry"><a id="id504431"/><p><span class="biblioid">
|
||||||
</em>
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
</a>
|
C++ ABI Reference
|
||||||
. </span></p></div><div class="biblioentry"><a id="id396937"></a><p><span class="biblioid">
|
</em>. </span></p></div><div class="biblioentry"><a id="id504449"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.codesourcery.com/public/cxx-abi/" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Intel Compilers for Linux Compatibility with the GNU Compilers
|
||||||
C++ ABI Reference
|
</em>. </span></p></div><div class="biblioentry"><a id="id504466"/><p><span class="biblioid">
|
||||||
</em>
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
</a>
|
Linker and Libraries Guide (document 819-0690)
|
||||||
. </span></p></div><div class="biblioentry"><a id="id396956"></a><p><span class="biblioid">
|
</em>. </span></p></div><div class="biblioentry"><a id="id504484"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Sun Studio 11: C++ Migration Guide (document 819-3689)
|
||||||
Intel Compilers for Linux Compatibility with the GNU Compilers
|
</em>. </span></p></div><div class="biblioentry"><a id="id504502"/><p><span class="biblioid">
|
||||||
</em>
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
</a>
|
How to Write Shared Libraries
|
||||||
. </span></p></div><div class="biblioentry"><a id="id396976"></a><p><span class="biblioid">
|
</em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="id504533"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://docs.sun.com/app/docs/doc/819-0690" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
C++ ABI for the ARM Architecture
|
||||||
Linker and Libraries Guide (document 819-0690)
|
</em>. </span></p></div><div class="biblioentry"><a id="id504550"/><p><span class="biblioid">
|
||||||
</em>
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
</a>
|
Dynamic Shared Objects: Survey and Issues
|
||||||
. </span></p></div><div class="biblioentry"><a id="id396995"></a><p><span class="biblioid">
|
</em>. </span><span class="subtitle">
|
||||||
<a class="ulink" href="http://docs.sun.com/app/docs/doc/819-3689" target="_top">
|
|
||||||
<em class="citetitle">
|
|
||||||
Sun Studio 11: C++ Migration Guide (document 819-3689)
|
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span></p></div><div class="biblioentry"><a id="id397015"></a><p><span class="biblioid">
|
|
||||||
<a class="ulink" href="http://people.redhat.com/drepper/dsohowto.pdf" target="_top">
|
|
||||||
<em class="citetitle">
|
|
||||||
How to Write Shared Libraries
|
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="id397046"></a><p><span class="biblioid">
|
|
||||||
<a class="ulink" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
|
|
||||||
<em class="citetitle">
|
|
||||||
C++ ABI for the ARM Architecture
|
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span></p></div><div class="biblioentry"><a id="id397065"></a><p><span class="biblioid">
|
|
||||||
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
|
|
||||||
<em class="citetitle">
|
|
||||||
Dynamic Shared Objects: Survey and Issues
|
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="subtitle">
|
|
||||||
ISO C++ J16/06-0046
|
ISO C++ J16/06-0046
|
||||||
. </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="id397100"></a><p><span class="biblioid">
|
. </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="id504580"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Versioning With Namespaces
|
||||||
Versioning With Namespaces
|
</em>. </span><span class="subtitle">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="subtitle">
|
|
||||||
ISO C++ J16/06-0083
|
ISO C++ J16/06-0083
|
||||||
. </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="id397135"></a><p><span class="biblioid">
|
. </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="id504609"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Binary Compatibility of Shared Libraries Implemented in C++
|
||||||
Binary Compatibility of Shared Libraries Implemented in C++
|
on GNU/Linux Systems
|
||||||
on GNU/Linux Systems
|
</em>. </span><span class="subtitle">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="subtitle">
|
|
||||||
SYRCoSE 2009
|
SYRCoSE 2009
|
||||||
. </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
|
. </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="test.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td align="left" valign="top">Test </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11. Algorithms</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library , algorithm " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10. Iterators" /><link rel="next" href="numerics.html" title="Chapter 12. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 11. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library , algorithm "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="iterators.html" title="Chapter 10. Iterators"/><link rel="next" href="numerics.html" title="Chapter 12. Numerics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11.
|
||||||
Algorithms
|
Algorithms
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 11. Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11.
|
</th><td align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 11. Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"/>Chapter 11.
|
||||||
Algorithms
|
Algorithms
|
||||||
<a id="id511298" class="indexterm"></a>
|
<a id="id482957" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="sect2"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></div><p>
|
||||||
The neatest accomplishment of the algorithms sect1 is that all the
|
The neatest accomplishment of the algorithms sect1 is that all the
|
||||||
work is done via iterators, not containers directly. This means two
|
work is done via iterators, not containers directly. This means two
|
||||||
important things:
|
important things:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
Anything that behaves like an iterator can be used in one of
|
Anything that behaves like an iterator can be used in one of
|
||||||
these algorithms. Raw pointers make great candidates, thus
|
these algorithms. Raw pointers make great candidates, thus
|
||||||
built-in arrays are fine containers, as well as your own
|
built-in arrays are fine containers, as well as your own
|
||||||
|
|
@ -42,7 +42,7 @@
|
||||||
to cause so much confusion. Once you
|
to cause so much confusion. Once you
|
||||||
get <span class="emphasis"><em>range</em></span> into your head (it's not that hard,
|
get <span class="emphasis"><em>range</em></span> into your head (it's not that hard,
|
||||||
honest!), then the algorithms are a cakewalk.
|
honest!), then the algorithms are a cakewalk.
|
||||||
</p><div class="sect1" title="Mutating"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.algorithms.mutating"></a>Mutating</h2></div></div></div><div class="sect2" title="swap"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"></a><code class="function">swap</code></h3></div></div></div><div class="sect3" title="Specializations"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"></a>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
|
</p><div class="section" title="Mutating"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms.mutating"/>Mutating</h2></div></div></div><div class="section" title="swap"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"/><code class="function">swap</code></h3></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"/>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
|
||||||
containers, then the call will automatically be replaced by a call to
|
containers, then the call will automatically be replaced by a call to
|
||||||
<code class="code"> x.swap(y); </code> instead.
|
<code class="code"> x.swap(y); </code> instead.
|
||||||
</p><p>This allows member functions of each container class to take over, and
|
</p><p>This allows member functions of each container class to take over, and
|
||||||
|
|
@ -52,10 +52,10 @@
|
||||||
fact use constant-time swaps.) This should not be surprising, since
|
fact use constant-time swaps.) This should not be surprising, since
|
||||||
for two containers of the same type to swap contents, only some
|
for two containers of the same type to swap contents, only some
|
||||||
internal pointers to storage need to be exchanged.
|
internal pointers to storage need to be exchanged.
|
||||||
</p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 10.
|
</p></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 10.
|
||||||
Iterators
|
Iterators
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 12.
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 12.
|
||||||
Numerics
|
Numerics
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="ISO C++, api, evolution, deprecation, history"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"/><link rel="prev" href="abi.html" title="ABI Policy and Guidelines"/><link rel="next" href="backwards.html" title="Backwards Compatibility"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
||||||
Porting and Maintenance
|
Porting and Maintenance
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="API Evolution and Deprecation History"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.api"></a>API Evolution and Deprecation History</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr/></div><div class="section" title="API Evolution and Deprecation History"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.api"/>API Evolution and Deprecation History</h2></div></div></div><p>
|
||||||
A list of user-visible changes, in chronological order
|
A list of user-visible changes, in chronological order
|
||||||
</p><div class="sect2" title="3.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_300"></a><code class="constant">3.0</code></h3></div></div></div><p>
|
</p><div class="section" title="3.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_300"/><code class="constant">3.0</code></h3></div></div></div><p>
|
||||||
Extensions moved to <code class="filename">include/ext</code>.
|
Extensions moved to <code class="filename">include/ext</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Include files from the SGI/HP sources that pre-date the ISO standard
|
Include files from the SGI/HP sources that pre-date the ISO standard
|
||||||
|
|
@ -14,7 +14,7 @@ the <code class="filename">include/backward</code> directory and a deprecated wa
|
||||||
is added that notifies on inclusion (<code class="literal">-Wno-deprecated</code>
|
is added that notifies on inclusion (<code class="literal">-Wno-deprecated</code>
|
||||||
deactivates the warning.)
|
deactivates the warning.)
|
||||||
</p><p>Deprecated include <code class="filename">backward/strstream</code> added.</p><p>Removal of include <code class="filename">builtinbuf.h</code>, <code class="filename">indstream.h</code>, <code class="filename">parsestream.h</code>, <code class="filename">PlotFile.h</code>, <code class="filename">SFile.h</code>, <code class="filename">stdiostream.h</code>, and <code class="filename">stream.h</code>.
|
</p><p>Deprecated include <code class="filename">backward/strstream</code> added.</p><p>Removal of include <code class="filename">builtinbuf.h</code>, <code class="filename">indstream.h</code>, <code class="filename">parsestream.h</code>, <code class="filename">PlotFile.h</code>, <code class="filename">SFile.h</code>, <code class="filename">stdiostream.h</code>, and <code class="filename">stream.h</code>.
|
||||||
</p></div><div class="sect2" title="3.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_310"></a><code class="constant">3.1</code></h3></div></div></div><p>
|
</p></div><div class="section" title="3.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_310"/><code class="constant">3.1</code></h3></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
Extensions from SGI/HP moved from <code class="code">namespace std</code>
|
Extensions from SGI/HP moved from <code class="code">namespace std</code>
|
||||||
to <code class="code">namespace __gnu_cxx</code>. As part of this, the following
|
to <code class="code">namespace __gnu_cxx</code>. As part of this, the following
|
||||||
|
|
@ -26,15 +26,15 @@ Extensions to <code class="code">basic_filebuf</code> introduced: <code class="c
|
||||||
Extensions to tree data structures added in <code class="filename">ext/rb_tree</code>.
|
Extensions to tree data structures added in <code class="filename">ext/rb_tree</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Removal of <code class="filename">ext/tree</code>, moved to <code class="filename">backward/tree.h</code>.
|
Removal of <code class="filename">ext/tree</code>, moved to <code class="filename">backward/tree.h</code>.
|
||||||
</p></div><div class="sect2" title="3.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_320"></a><code class="constant">3.2</code></h3></div></div></div><p>
|
</p></div><div class="section" title="3.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_320"/><code class="constant">3.2</code></h3></div></div></div><p>
|
||||||
</p><p>Symbol versioning introduced for shared library.</p><p>Removal of include <code class="filename">backward/strstream.h</code>.</p><p>Allocator changes. Change <code class="code">__malloc_alloc</code> to <code class="code">malloc_allocator</code> and <code class="code">__new_alloc</code> to <code class="code">new_allocator</code>. </p><p> For GCC releases from 2.95 through the 3.1 series, defining
|
</p><p>Symbol versioning introduced for shared library.</p><p>Removal of include <code class="filename">backward/strstream.h</code>.</p><p>Allocator changes. Change <code class="code">__malloc_alloc</code> to <code class="code">malloc_allocator</code> and <code class="code">__new_alloc</code> to <code class="code">new_allocator</code>. </p><p> For GCC releases from 2.95 through the 3.1 series, defining
|
||||||
<code class="literal">__USE_MALLOC</code> on the gcc command line would change the
|
<code class="literal">__USE_MALLOC</code> on the gcc command line would change the
|
||||||
default allocation strategy to instead use <code class="code"> malloc</code> and
|
default allocation strategy to instead use <code class="code"> malloc</code> and
|
||||||
<code class="function">free</code>. (This same functionality is now spelled <code class="literal">_GLIBCXX_FORCE_NEW</code>, see
|
<code class="function">free</code>. (This same functionality is now spelled <code class="literal">_GLIBCXX_FORCE_NEW</code>, see
|
||||||
<a class="link" href="using_macros.html" title="Macros">this page</a>
|
<a class="link" href="using_macros.html" title="Macros">this page</a>
|
||||||
for details.
|
for details.
|
||||||
</p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="sect2" title="3.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"></a><code class="constant">3.3</code></h3></div></div></div><p>
|
</p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="section" title="3.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"/><code class="constant">3.3</code></h3></div></div></div><p>
|
||||||
</p></div><div class="sect2" title="3.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"></a><code class="constant">3.4</code></h3></div></div></div><p>
|
</p></div><div class="section" title="3.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"/><code class="constant">3.4</code></h3></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
Large file support.
|
Large file support.
|
||||||
</p><p> Extensions for generic characters and <code class="code">char_traits</code> added in <code class="filename">ext/pod_char_traits.h</code>.
|
</p><p> Extensions for generic characters and <code class="code">char_traits</code> added in <code class="filename">ext/pod_char_traits.h</code>.
|
||||||
|
|
@ -75,11 +75,11 @@ _Alloc_traits</code> have been removed.
|
||||||
<span class="type">__alloc</span> to select an underlying allocator that
|
<span class="type">__alloc</span> to select an underlying allocator that
|
||||||
satisfied memory allocation requests. The selection of this
|
satisfied memory allocation requests. The selection of this
|
||||||
underlying allocator was not user-configurable.
|
underlying allocator was not user-configurable.
|
||||||
</p><div class="table"><a id="id510444"></a><p class="title"><b>Table B.1. Extension Allocators</b></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator<T></code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator<T></code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template<int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator<T></code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc<T></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc<T></code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template<bool,int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc<T></code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator<T></code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
|
</p><div class="table"><a id="id505170"/><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Allocator (3.4)</th><th style="text-align: left">Header (3.4)</th><th style="text-align: left">Allocator (3.[0-3])</th><th style="text-align: left">Header (3.[0-3])</th></tr></thead><tbody><tr><td style="text-align: left"><code class="classname">__gnu_cxx::new_allocator<T></code></td><td style="text-align: left"><code class="filename">ext/new_allocator.h</code></td><td style="text-align: left"><code class="classname">std::__new_alloc</code></td><td style="text-align: left"><code class="filename">memory</code></td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::malloc_allocator<T></code></td><td style="text-align: left"><code class="filename">ext/malloc_allocator.h</code></td><td style="text-align: left"><code class="classname">std::__malloc_alloc_template<int></code></td><td style="text-align: left"><code class="filename">memory</code></td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::debug_allocator<T></code></td><td style="text-align: left"><code class="filename">ext/debug_allocator.h</code></td><td style="text-align: left"><code class="classname">std::debug_alloc<T></code></td><td style="text-align: left"><code class="filename">memory</code></td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::__pool_alloc<T></code></td><td style="text-align: left"><code class="filename">ext/pool_allocator.h</code></td><td style="text-align: left"><code class="classname">std::__default_alloc_template<bool,int></code></td><td style="text-align: left"><code class="filename">memory</code></td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::__mt_alloc<T></code></td><td style="text-align: left"><code class="filename">ext/mt_allocator.h</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::bitmap_allocator<T></code></td><td style="text-align: left"><code class="filename">ext/bitmap_allocator.h</code></td><td style="text-align: left"> </td><td style="text-align: left"> </td></tr></tbody></table></div></div><br class="table-break"/><p> Releases after gcc-3.4 have continued to add to the collection
|
||||||
of available allocators. All of these new allocators are
|
of available allocators. All of these new allocators are
|
||||||
standard-style. The following table includes details, along with
|
standard-style. The following table includes details, along with
|
||||||
the first released version of GCC that included the extension allocator.
|
the first released version of GCC that included the extension allocator.
|
||||||
</p><div class="table"><a id="id396448"></a><p class="title"><b>Table B.2. Extension Allocators Continued</b></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator<T></code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator<T></code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
|
</p><div class="table"><a id="id505400"/><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/></colgroup><thead><tr><th style="text-align: left">Allocator</th><th style="text-align: left">Include</th><th style="text-align: left">Version</th></tr></thead><tbody><tr><td style="text-align: left"><code class="classname">__gnu_cxx::array_allocator<T></code></td><td style="text-align: left"><code class="filename">ext/array_allocator.h</code></td><td style="text-align: left">4.0.0</td></tr><tr><td style="text-align: left"><code class="classname">__gnu_cxx::throw_allocator<T></code></td><td style="text-align: left"><code class="filename">ext/throw_allocator.h</code></td><td style="text-align: left">4.2.0</td></tr></tbody></table></div></div><br class="table-break"/><p>
|
||||||
Debug mode first appears.
|
Debug mode first appears.
|
||||||
</p><p>
|
</p><p>
|
||||||
Precompiled header support <acronym class="acronym">PCH</acronym> support.
|
Precompiled header support <acronym class="acronym">PCH</acronym> support.
|
||||||
|
|
@ -89,7 +89,7 @@ Macro guard for changed, from <code class="literal">_GLIBCPP_</code> to <code cl
|
||||||
Extension <code class="filename">ext/stdio_sync_filebuf.h</code> added.
|
Extension <code class="filename">ext/stdio_sync_filebuf.h</code> added.
|
||||||
</p><p>
|
</p><p>
|
||||||
Extension <code class="filename">ext/demangle.h</code> added.
|
Extension <code class="filename">ext/demangle.h</code> added.
|
||||||
</p></div><div class="sect2" title="4.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_400"></a><code class="constant">4.0</code></h3></div></div></div><p>
|
</p></div><div class="section" title="4.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_400"/><code class="constant">4.0</code></h3></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
TR1 features first appear.
|
TR1 features first appear.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -98,14 +98,14 @@ Extension allocator <code class="filename">ext/array_allocator.h</code> added.
|
||||||
Extension <code class="code">codecvt</code> specializations moved to <code class="filename">ext/codecvt_specializations.h</code>.
|
Extension <code class="code">codecvt</code> specializations moved to <code class="filename">ext/codecvt_specializations.h</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Removal of <code class="filename">ext/demangle.h</code>.
|
Removal of <code class="filename">ext/demangle.h</code>.
|
||||||
</p></div><div class="sect2" title="4.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_410"></a><code class="constant">4.1</code></h3></div></div></div><p>
|
</p></div><div class="section" title="4.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_410"/><code class="constant">4.1</code></h3></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
Removal of <code class="filename">cassert</code> from all standard headers: now has to be explicitly included for <code class="code">std::assert</code> calls.
|
Removal of <code class="filename">cassert</code> from all standard headers: now has to be explicitly included for <code class="code">std::assert</code> calls.
|
||||||
</p><p> Extensions for policy-based data structures first added. New includes,
|
</p><p> Extensions for policy-based data structures first added. New includes,
|
||||||
types, namespace <code class="code">pb_assoc</code>.
|
types, namespace <code class="code">pb_assoc</code>.
|
||||||
</p><p> Extensions for typelists added in <code class="filename">ext/typelist.h</code>.
|
</p><p> Extensions for typelists added in <code class="filename">ext/typelist.h</code>.
|
||||||
</p><p> Extension for policy-based <code class="code">basic_string</code> first added: <code class="code">__gnu_cxx::__versa_string</code> in <code class="filename">ext/vstring.h</code>.
|
</p><p> Extension for policy-based <code class="code">basic_string</code> first added: <code class="code">__gnu_cxx::__versa_string</code> in <code class="filename">ext/vstring.h</code>.
|
||||||
</p></div><div class="sect2" title="4.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_420"></a><code class="constant">4.2</code></h3></div></div></div><p>
|
</p></div><div class="section" title="4.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_420"/><code class="constant">4.2</code></h3></div></div></div><p>
|
||||||
</p><p> Default visibility attributes applied to <code class="code">namespace std</code>. Support for <code class="code">-fvisibility</code>.
|
</p><p> Default visibility attributes applied to <code class="code">namespace std</code>. Support for <code class="code">-fvisibility</code>.
|
||||||
</p><p>TR1 <code class="filename">random</code>, <code class="filename">complex</code>, and C compatibility headers added.</p><p> Extensions for concurrent programming consolidated
|
</p><p>TR1 <code class="filename">random</code>, <code class="filename">complex</code>, and C compatibility headers added.</p><p> Extensions for concurrent programming consolidated
|
||||||
into <code class="filename">ext/concurrence.h</code> and <code class="filename">ext/atomicity.h</code>,
|
into <code class="filename">ext/concurrence.h</code> and <code class="filename">ext/atomicity.h</code>,
|
||||||
|
|
@ -120,13 +120,13 @@ types, namespace moved to <code class="code">__pb_ds</code>.
|
||||||
std::__debug</code> and extensions in <code class="code">namespace
|
std::__debug</code> and extensions in <code class="code">namespace
|
||||||
__gnu_cxx::__debug</code>.</p><p> Extensions added: <code class="filename">ext/typelist.h</code>
|
__gnu_cxx::__debug</code>.</p><p> Extensions added: <code class="filename">ext/typelist.h</code>
|
||||||
and <code class="filename">ext/throw_allocator.h</code>.
|
and <code class="filename">ext/throw_allocator.h</code>.
|
||||||
</p></div><div class="sect2" title="4.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_430"></a><code class="constant">4.3</code></h3></div></div></div><p>
|
</p></div><div class="section" title="4.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_430"/><code class="constant">4.3</code></h3></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
C++0X features first appear.
|
C++0X features first appear.
|
||||||
</p><p>TR1 <code class="filename">regex</code> and <code class="filename">cmath</code>'s mathematical special function added.
|
</p><p>TR1 <code class="filename">regex</code> and <code class="filename">cmath</code>'s mathematical special function added.
|
||||||
</p><p>
|
</p><p>
|
||||||
Backward include edit.
|
Backward include edit.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Removed</p><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>Removed</p><p>
|
||||||
<code class="filename">algobase.h</code> <code class="filename">algo.h</code> <code class="filename">alloc.h</code> <code class="filename">bvector.h</code> <code class="filename">complex.h</code>
|
<code class="filename">algobase.h</code> <code class="filename">algo.h</code> <code class="filename">alloc.h</code> <code class="filename">bvector.h</code> <code class="filename">complex.h</code>
|
||||||
<code class="filename">defalloc.h</code> <code class="filename">deque.h</code> <code class="filename">fstream.h</code> <code class="filename">function.h</code> <code class="filename">hash_map.h</code> <code class="filename">hash_set.h</code>
|
<code class="filename">defalloc.h</code> <code class="filename">deque.h</code> <code class="filename">fstream.h</code> <code class="filename">function.h</code> <code class="filename">hash_map.h</code> <code class="filename">hash_set.h</code>
|
||||||
<code class="filename">hashtable.h</code> <code class="filename">heap.h</code> <code class="filename">iomanip.h</code> <code class="filename">iostream.h</code> <code class="filename">istream.h</code> <code class="filename">iterator.h</code>
|
<code class="filename">hashtable.h</code> <code class="filename">heap.h</code> <code class="filename">iomanip.h</code> <code class="filename">iostream.h</code> <code class="filename">istream.h</code> <code class="filename">iterator.h</code>
|
||||||
|
|
@ -138,7 +138,7 @@ Backward include edit.
|
||||||
<code class="filename">auto_ptr.h</code> and <code class="filename">binders.h</code>
|
<code class="filename">auto_ptr.h</code> and <code class="filename">binders.h</code>
|
||||||
</p></li></ul></div><p>
|
</p></li></ul></div><p>
|
||||||
Header dependency streamlining.
|
Header dependency streamlining.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="filename">algorithm</code> no longer includes <code class="filename">climits</code>, <code class="filename">cstring</code>, or <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">bitset</code> no longer includes <code class="filename">istream</code> or <code class="filename">ostream</code>, adds <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">functional</code> no longer includes <code class="filename">cstddef</code></p></li><li class="listitem"><p><code class="filename">iomanip</code> no longer includes <code class="filename">istream</code>, <code class="filename">istream</code>, or <code class="filename">functional</code>, adds <code class="filename">ioswd</code> </p></li><li class="listitem"><p><code class="filename">numeric</code> no longer includes <code class="filename">iterator</code></p></li><li class="listitem"><p><code class="filename">string</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">memory</code></p></li><li class="listitem"><p><code class="filename">valarray</code> no longer includes <code class="filename">numeric</code> or <code class="filename">cstdlib</code></p></li><li class="listitem"><p><code class="filename">tr1/hashtable</code> no longer includes <code class="filename">memory</code> or <code class="filename">functional</code></p></li><li class="listitem"><p><code class="filename">tr1/memory</code> no longer includes <code class="filename">algorithm</code></p></li><li class="listitem"><p><code class="filename">tr1/random</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">fstream</code></p></li></ul></div><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="filename">algorithm</code> no longer includes <code class="filename">climits</code>, <code class="filename">cstring</code>, or <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">bitset</code> no longer includes <code class="filename">istream</code> or <code class="filename">ostream</code>, adds <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">functional</code> no longer includes <code class="filename">cstddef</code></p></li><li class="listitem"><p><code class="filename">iomanip</code> no longer includes <code class="filename">istream</code>, <code class="filename">istream</code>, or <code class="filename">functional</code>, adds <code class="filename">ioswd</code> </p></li><li class="listitem"><p><code class="filename">numeric</code> no longer includes <code class="filename">iterator</code></p></li><li class="listitem"><p><code class="filename">string</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">memory</code></p></li><li class="listitem"><p><code class="filename">valarray</code> no longer includes <code class="filename">numeric</code> or <code class="filename">cstdlib</code></p></li><li class="listitem"><p><code class="filename">tr1/hashtable</code> no longer includes <code class="filename">memory</code> or <code class="filename">functional</code></p></li><li class="listitem"><p><code class="filename">tr1/memory</code> no longer includes <code class="filename">algorithm</code></p></li><li class="listitem"><p><code class="filename">tr1/random</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">fstream</code></p></li></ul></div><p>
|
||||||
Debug mode for <code class="filename">unordered_map</code> and <code class="filename">unordered_set</code>.
|
Debug mode for <code class="filename">unordered_map</code> and <code class="filename">unordered_set</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Parallel mode first appears.
|
Parallel mode first appears.
|
||||||
|
|
@ -152,10 +152,10 @@ Parallel mode first appears.
|
||||||
PCH binary files no longer installed. Instead, the source files are installed.
|
PCH binary files no longer installed. Instead, the source files are installed.
|
||||||
</p><p>
|
</p><p>
|
||||||
Namespace pb_ds moved to __gnu_pb_ds.
|
Namespace pb_ds moved to __gnu_pb_ds.
|
||||||
</p></div><div class="sect2" title="4.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"></a><code class="constant">4.4</code></h3></div></div></div><p>
|
</p></div><div class="section" title="4.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"/><code class="constant">4.4</code></h3></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
C++0X features.
|
C++0X features.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Added.
|
Added.
|
||||||
</p><p>
|
</p><p>
|
||||||
<code class="filename">atomic</code>,
|
<code class="filename">atomic</code>,
|
||||||
|
|
@ -207,10 +207,10 @@ and <code class="filename">ext/extptr_allocator.h</code>. Support
|
||||||
for non-standard pointer types has been added
|
for non-standard pointer types has been added
|
||||||
to <code class="classname">vector</code>
|
to <code class="classname">vector</code>
|
||||||
and <code class="classname">forward_list</code>.
|
and <code class="classname">forward_list</code>.
|
||||||
</p></div><div class="sect2" title="4.5"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_450"></a><code class="constant">4.5</code></h3></div></div></div><p>
|
</p></div><div class="section" title="4.5"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_450"/><code class="constant">4.5</code></h3></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
C++0X features.
|
C++0X features.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Added.
|
Added.
|
||||||
</p><p>
|
</p><p>
|
||||||
<code class="filename">functional</code>,
|
<code class="filename">functional</code>,
|
||||||
|
|
@ -237,4 +237,4 @@ The default behavior for comparing typeinfo names changed, so
|
||||||
in <code class="filename">typeinfo</code>, <code class="literal">__GXX_MERGED_TYPEINFO_NAMES</code>
|
in <code class="filename">typeinfo</code>, <code class="literal">__GXX_MERGED_TYPEINFO_NAMES</code>
|
||||||
now defaults to zero.
|
now defaults to zero.
|
||||||
</p><p> Extensions modified: <code class="filename">ext/throw_allocator.h</code>.
|
</p><p> Extensions modified: <code class="filename">ext/throw_allocator.h</code>.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td align="left" valign="top">ABI Policy and Guidelines </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A. Contributing</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV. Appendices" /><link rel="prev" href="bk01pt04.html" title="Part IV. Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix A. Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV. Appendices"/><link rel="prev" href="bk01pt04.html" title="Part IV. Appendices"/><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A.
|
||||||
Contributing
|
Contributing
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><th width="60%" align="center">Part IV.
|
</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><th width="60%" align="center">Part IV.
|
||||||
Appendices
|
Appendices
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix A. Contributing"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.contrib"></a>Appendix A.
|
</th><td align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix A. Contributing"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"/>
|
||||||
Contributing
|
Contributing
|
||||||
<a id="id431932" class="indexterm"></a>
|
<a id="id495961" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.docbook">Docbook</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.combines">Combines</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
|
</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
|
||||||
The GNU C++ Library follows an open development model. Active
|
The GNU C++ Library follows an open development model. Active
|
||||||
contributors are assigned maintainer-ship responsibility, and given
|
contributors are assigned maintainer-ship responsibility, and given
|
||||||
write access to the source repository. First time contributors
|
write access to the source repository. First time contributors
|
||||||
should follow this procedure:
|
should follow this procedure:
|
||||||
</p><div class="sect1" title="Contributor Checklist"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.list"></a>Contributor Checklist</h2></div></div></div><div class="sect2" title="Reading"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"></a>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="section" title="Contributor Checklist"><div class="titlepage"><div><div><h2 class="title"><a id="contrib.list"/>Contributor Checklist</h2></div></div></div><div class="section" title="Reading"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"/>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Get and read the relevant sections of the C++ language
|
Get and read the relevant sections of the C++ language
|
||||||
specification. Copies of the full ISO 14882 standard are
|
specification. Copies of the full ISO 14882 standard are
|
||||||
available on line via the ISO mirror site for committee
|
available on line via the ISO mirror site for committee
|
||||||
|
|
@ -23,22 +23,22 @@
|
||||||
the standard from their respective national standards
|
the standard from their respective national standards
|
||||||
organization. In the USA, this national standards
|
organization. In the USA, this national standards
|
||||||
organization is ANSI and their web-site is right
|
organization is ANSI and their web-site is right
|
||||||
<a class="ulink" href="http://www.ansi.org" target="_top">here.</a>
|
<a class="link" href="http://www.ansi.org">here.</a>
|
||||||
(And if you've already registered with them, clicking this link will take you to directly to the place where you can
|
(And if you've already registered with them, clicking this link will take you to directly to the place where you can
|
||||||
<a class="ulink" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003" target="_top">buy the standard on-line</a>.)
|
<a class="link" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line</a>.)
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
The library working group bugs, and known defects, can
|
The library working group bugs, and known defects, can
|
||||||
be obtained here:
|
be obtained here:
|
||||||
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/" target="_top">http://www.open-std.org/jtc1/sc22/wg21 </a>
|
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21 </a>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
The newsgroup dedicated to standardization issues is
|
The newsgroup dedicated to standardization issues is
|
||||||
comp.std.c++: this FAQ for this group is quite useful and
|
comp.std.c++: this FAQ for this group is quite useful and
|
||||||
can be
|
can be
|
||||||
found <a class="ulink" href="http://www.comeaucomputing.com/csc/faq.html" target="_top">
|
found <a class="link" href="http://www.comeaucomputing.com/csc/faq.html">
|
||||||
here </a>.
|
here </a>.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
Peruse
|
Peruse
|
||||||
the <a class="ulink" href="http://www.gnu.org/prep/standards" target="_top">GNU
|
the <a class="link" href="http://www.gnu.org/prep/standards">GNU
|
||||||
Coding Standards</a>, and chuckle when you hit the part
|
Coding Standards</a>, and chuckle when you hit the part
|
||||||
about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
|
about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
And last but certainly not least, read the
|
And last but certainly not least, read the
|
||||||
library-specific information
|
library-specific information
|
||||||
found <a class="link" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"> here</a>.
|
found <a class="link" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"> here</a>.
|
||||||
</p></li></ul></div></div><div class="sect2" title="Assignment"><div class="titlepage"><div><div><h3 class="title"><a id="list.copyright"></a>Assignment</h3></div></div></div><p>
|
</p></li></ul></div></div><div class="section" title="Assignment"><div class="titlepage"><div><div><h3 class="title"><a id="list.copyright"/>Assignment</h3></div></div></div><p>
|
||||||
Small changes can be accepted without a copyright assignment form on
|
Small changes can be accepted without a copyright assignment form on
|
||||||
file. New code and additions to the library need completed copyright
|
file. New code and additions to the library need completed copyright
|
||||||
assignment form on file at the FSF. Note: your employer may be required
|
assignment form on file at the FSF. Note: your employer may be required
|
||||||
|
|
@ -67,7 +67,7 @@
|
||||||
this question would be appreciated.
|
this question would be appreciated.
|
||||||
</p><p>
|
</p><p>
|
||||||
For more information about getting a copyright assignment, please see
|
For more information about getting a copyright assignment, please see
|
||||||
<a class="ulink" href="http://www.gnu.org/prep/maintain/html_node/Legal-Matters.html" target="_top">Legal
|
<a class="link" href="http://www.gnu.org/prep/maintain/html_node/Legal-Matters.html">Legal
|
||||||
Matters</a>.
|
Matters</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Please contact Benjamin Kosnik at
|
Please contact Benjamin Kosnik at
|
||||||
|
|
@ -76,14 +76,14 @@
|
||||||
requesting an assignment form from
|
requesting an assignment form from
|
||||||
<code class="email"><<a class="email" href="mailto:mailto:assign@gnu.org">mailto:assign@gnu.org</a>></code>, please cc the libstdc++
|
<code class="email"><<a class="email" href="mailto:mailto:assign@gnu.org">mailto:assign@gnu.org</a>></code>, please cc the libstdc++
|
||||||
maintainer above so that progress can be monitored.
|
maintainer above so that progress can be monitored.
|
||||||
</p></div><div class="sect2" title="Getting Sources"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"></a>Getting Sources</h3></div></div></div><p>
|
</p></div><div class="section" title="Getting Sources"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"/>Getting Sources</h3></div></div></div><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/svnwrite.html" target="_top">Getting write access
|
<a class="link" href="http://gcc.gnu.org/svnwrite.html">Getting write access
|
||||||
(look for "Write after approval")</a>
|
(look for "Write after approval")</a>
|
||||||
</p></div><div class="sect2" title="Submitting Patches"><div class="titlepage"><div><div><h3 class="title"><a id="list.patches"></a>Submitting Patches</h3></div></div></div><p>
|
</p></div><div class="section" title="Submitting Patches"><div class="titlepage"><div><div><h3 class="title"><a id="list.patches"/>Submitting Patches</h3></div></div></div><p>
|
||||||
Every patch must have several pieces of information before it can be
|
Every patch must have several pieces of information before it can be
|
||||||
properly evaluated. Ideally (and to ensure the fastest possible
|
properly evaluated. Ideally (and to ensure the fastest possible
|
||||||
response from the maintainers) it would have all of these pieces:
|
response from the maintainers) it would have all of these pieces:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
A description of the bug and how your patch fixes this
|
A description of the bug and how your patch fixes this
|
||||||
bug. For new features a description of the feature and your
|
bug. For new features a description of the feature and your
|
||||||
implementation.
|
implementation.
|
||||||
|
|
@ -104,7 +104,7 @@
|
||||||
else, use <span class="command"><strong>diff -cp OLD NEW</strong></span> ... If your
|
else, use <span class="command"><strong>diff -cp OLD NEW</strong></span> ... If your
|
||||||
version of diff does not support these options, then get the
|
version of diff does not support these options, then get the
|
||||||
latest version of GNU
|
latest version of GNU
|
||||||
diff. The <a class="ulink" href="http://gcc.gnu.org/wiki/SvnTricks" target="_top">SVN
|
diff. The <a class="link" href="http://gcc.gnu.org/wiki/SvnTricks">SVN
|
||||||
Tricks</a> wiki page has information on customising the
|
Tricks</a> wiki page has information on customising the
|
||||||
output of <code class="code">svn diff</code>.
|
output of <code class="code">svn diff</code>.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
|
|
@ -112,6 +112,6 @@
|
||||||
mail message and send it to libstdc++@gcc.gnu.org. All
|
mail message and send it to libstdc++@gcc.gnu.org. All
|
||||||
patches and related discussion should be sent to the
|
patches and related discussion should be sent to the
|
||||||
libstdc++ mailing list.
|
libstdc++ mailing list.
|
||||||
</p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IV.
|
</p></li></ul></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr><tr><td align="left" valign="top">Part IV.
|
||||||
Appendices
|
Appendices
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C. Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV. Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix C. Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV. Appendices"/><link rel="prev" href="backwards.html" title="Backwards Compatibility"/><link rel="next" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C.
|
||||||
Free Software Needs Free Documentation
|
Free Software Needs Free Documentation
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV.
|
</th></tr><tr><td align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV.
|
||||||
Appendices
|
Appendices
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix C. Free Software Needs Free Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.free"></a>Appendix C.
|
</th><td align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix C. Free Software Needs Free Documentation"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"/>
|
||||||
Free Software Needs Free Documentation
|
Free Software Needs Free Documentation
|
||||||
<a id="id381354" class="indexterm"></a>
|
<a id="id508339" class="indexterm"/>
|
||||||
</h2></div></div></div><p>
|
</h1></div></div></div><p>
|
||||||
The biggest deficiency in free operating systems is not in the
|
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
|
software--it is the lack of good free manuals that we can include in
|
||||||
these systems. Many of our most important programs do not come with
|
these systems. Many of our most important programs do not come with
|
||||||
|
|
@ -41,7 +41,7 @@ can ill afford to lose manuals this way.
|
||||||
Free documentation, like free software, is a matter of freedom,
|
Free documentation, like free software, is a matter of freedom,
|
||||||
not price. The problem with these manuals was not that O'Reilly
|
not price. The problem with these manuals was not that O'Reilly
|
||||||
Associates charged a price for printed copies--that in itself is fine.
|
Associates charged a price for printed copies--that in itself is fine.
|
||||||
(The Free Software Foundation <a class="ulink" href="http://www.gnu.org/doc/doc.html" target="_top">sells printed copies</a> of
|
(The Free Software Foundation <a class="link" href="http://www.gnu.org/doc/doc.html">sells printed copies</a> of
|
||||||
free GNU manuals, too.) But GNU manuals are available in source code
|
free GNU manuals, too.) But GNU manuals are available in source code
|
||||||
form, while these manuals are available only on paper. GNU manuals
|
form, while these manuals are available only on paper. GNU manuals
|
||||||
come with permission to copy and modify; the Perl manuals do not.
|
come with permission to copy and modify; the Perl manuals do not.
|
||||||
|
|
@ -117,10 +117,10 @@ manuals instead of proprietary ones. One way you can help this is to
|
||||||
check the distribution terms of a manual before you buy it, and
|
check the distribution terms of a manual before you buy it, and
|
||||||
prefer copylefted manuals to non-copylefted ones.
|
prefer copylefted manuals to non-copylefted ones.
|
||||||
</p><p>
|
</p><p>
|
||||||
[Note: We now maintain a <a class="ulink" href="http://www.fsf.org/licensing/doc/other-free-books.html" target="_top">web page
|
[Note: We now maintain a <a class="link" href="http://www.fsf.org/licensing/doc/other-free-books.html">web page
|
||||||
that lists free books available from other publishers</a>].
|
that lists free books available from other publishers</a>].
|
||||||
</p><p>Copyright © 2004, 2005, 2006, 2007 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</p><p>Verbatim copying and distribution of this entire article are
|
</p><p>Copyright © 2004, 2005, 2006, 2007 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</p><p>Verbatim copying and distribution of this entire article are
|
||||||
permitted worldwide, without royalty, in any medium, provided this
|
permitted worldwide, without royalty, in any medium, provided this
|
||||||
notice is preserved.</p><p>Report any problems or suggestions to <code class="email"><<a class="email" href="mailto:webmaster@fsf.org">webmaster@fsf.org</a>></code>.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix D.
|
notice is preserved.</p><p>Report any problems or suggestions to <code class="email"><<a class="email" href="mailto:webmaster@fsf.org">webmaster@fsf.org</a>></code>.</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr><tr><td align="left" valign="top">Backwards Compatibility </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Appendix D.
|
||||||
<acronym class="acronym">GNU</acronym> General Public License version 3
|
<acronym class="acronym">GNU</acronym> General Public License version 3
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV. Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV. Appendices"/><link rel="prev" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3"/><link rel="next" href="../bk02.html" title=""/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV.
|
||||||
Appendices
|
Appendices
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix E. GNU Free Documentation License"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.gfdl-1.3"></a>Appendix E. GNU Free Documentation License</h2></div></div></div><p>Version 1.3, 3 November 2008</p><p>
|
</th><td align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix E. GNU Free Documentation License"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gfdl-1.3"/>GNU Free Documentation License</h1></div></div></div><p>Version 1.3, 3 November 2008</p><p>
|
||||||
Copyright © 2000, 2001, 2002, 2007, 2008
|
Copyright © 2000, 2001, 2002, 2007, 2008
|
||||||
<a class="ulink" href="http://www.fsf.org/" target="_top">Free Software Foundation, Inc.</a>
|
<a class="link" href="http://www.fsf.org/">Free Software Foundation, Inc.</a>
|
||||||
</p><p>
|
</p><p>
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this
|
Everyone is permitted to copy and distribute verbatim copies of this
|
||||||
license document, but changing it is not allowed.
|
license document, but changing it is not allowed.
|
||||||
</p><h3><a id="fdl-1-section0"></a>
|
</p><h3><a id="fdl-1-section0"/>
|
||||||
0. PREAMBLE
|
0. PREAMBLE
|
||||||
</h3><p>
|
</h3><p>
|
||||||
The purpose of this License is to make a manual, textbook, or other
|
The purpose of this License is to make a manual, textbook, or other
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
for any textual work, regardless of subject matter or whether it is
|
for any textual work, regardless of subject matter or whether it is
|
||||||
published as a printed book. We recommend this License principally for
|
published as a printed book. We recommend this License principally for
|
||||||
works whose purpose is instruction or reference.
|
works whose purpose is instruction or reference.
|
||||||
</p><h3><a id="fdl-1-section1"></a>
|
</p><h3><a id="fdl-1-section1"/>
|
||||||
1. APPLICABILITY AND DEFINITIONS
|
1. APPLICABILITY AND DEFINITIONS
|
||||||
</h3><p>
|
</h3><p>
|
||||||
This License applies to any manual or other work, in any medium, that
|
This License applies to any manual or other work, in any medium, that
|
||||||
|
|
@ -120,7 +120,7 @@
|
||||||
but only as regards disclaiming warranties: any other implication that
|
but only as regards disclaiming warranties: any other implication that
|
||||||
these Warranty Disclaimers may have is void and has no effect on the
|
these Warranty Disclaimers may have is void and has no effect on the
|
||||||
meaning of this License.
|
meaning of this License.
|
||||||
</p><h3><a id="fdl-1-section2"></a>
|
</p><h3><a id="fdl-1-section2"/>
|
||||||
2. VERBATIM COPYING
|
2. VERBATIM COPYING
|
||||||
</h3><p>
|
</h3><p>
|
||||||
You may copy and distribute the Document in any medium, either
|
You may copy and distribute the Document in any medium, either
|
||||||
|
|
@ -135,7 +135,7 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
You may also lend copies, under the same conditions stated above, and you
|
You may also lend copies, under the same conditions stated above, and you
|
||||||
may publicly display copies.
|
may publicly display copies.
|
||||||
</p><h3><a id="fdl-1-section3"></a>
|
</p><h3><a id="fdl-1-section3"/>
|
||||||
3. COPYING IN QUANTITY
|
3. COPYING IN QUANTITY
|
||||||
</h3><p>
|
</h3><p>
|
||||||
If you publish printed copies (or copies in media that commonly have
|
If you publish printed copies (or copies in media that commonly have
|
||||||
|
|
@ -169,7 +169,7 @@
|
||||||
It is requested, but not required, that you contact the authors of the
|
It is requested, but not required, that you contact the authors of the
|
||||||
Document well before redistributing any large number of copies, to give
|
Document well before redistributing any large number of copies, to give
|
||||||
them a chance to provide you with an updated version of the Document.
|
them a chance to provide you with an updated version of the Document.
|
||||||
</p><h3><a id="fdl-1-section4"></a>
|
</p><h3><a id="fdl-1-section4"/>
|
||||||
4. MODIFICATIONS
|
4. MODIFICATIONS
|
||||||
</h3><p>
|
</h3><p>
|
||||||
You may copy and distribute a Modified Version of the Document under the
|
You may copy and distribute a Modified Version of the Document under the
|
||||||
|
|
@ -178,7 +178,7 @@
|
||||||
filling the role of the Document, thus licensing distribution and
|
filling the role of the Document, thus licensing distribution and
|
||||||
modification of the Modified Version to whoever possesses a copy of it. In
|
modification of the Modified Version to whoever possesses a copy of it. In
|
||||||
addition, you must do these things in the Modified Version:
|
addition, you must do these things in the Modified Version:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="A"><li class="listitem">
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem">
|
||||||
Use in the Title Page (and on the covers, if any) a title distinct
|
Use in the Title Page (and on the covers, if any) a title distinct
|
||||||
from that of the Document, and from those of previous versions (which
|
from that of the Document, and from those of previous versions (which
|
||||||
should, if there were any, be listed in the History section of the
|
should, if there were any, be listed in the History section of the
|
||||||
|
|
@ -269,7 +269,7 @@
|
||||||
The author(s) and publisher(s) of the Document do not by this License give
|
The author(s) and publisher(s) of the Document do not by this License give
|
||||||
permission to use their names for publicity for or to assert or imply
|
permission to use their names for publicity for or to assert or imply
|
||||||
endorsement of any Modified Version.
|
endorsement of any Modified Version.
|
||||||
</p><h3><a id="fdl-1-section5"></a>
|
</p><h3><a id="fdl-1-section5"/>
|
||||||
5. COMBINING DOCUMENTS
|
5. COMBINING DOCUMENTS
|
||||||
</h3><p>
|
</h3><p>
|
||||||
You may combine the Document with other documents released under this
|
You may combine the Document with other documents released under this
|
||||||
|
|
@ -294,7 +294,7 @@
|
||||||
Entitled “Acknowledgements”, and any sections Entitled
|
Entitled “Acknowledgements”, and any sections Entitled
|
||||||
“Dedications”. You must delete all sections Entitled
|
“Dedications”. You must delete all sections Entitled
|
||||||
“Endorsements”.
|
“Endorsements”.
|
||||||
</p><h3><a id="fdl-1-section6"></a>
|
</p><h3><a id="fdl-1-section6"/>
|
||||||
6. COLLECTIONS OF DOCUMENTS
|
6. COLLECTIONS OF DOCUMENTS
|
||||||
</h3><p>
|
</h3><p>
|
||||||
You may make a collection consisting of the Document and other documents
|
You may make a collection consisting of the Document and other documents
|
||||||
|
|
@ -307,7 +307,7 @@
|
||||||
it individually under this License, provided you insert a copy of this
|
it individually under this License, provided you insert a copy of this
|
||||||
License into the extracted document, and follow this License in all other
|
License into the extracted document, and follow this License in all other
|
||||||
respects regarding verbatim copying of that document.
|
respects regarding verbatim copying of that document.
|
||||||
</p><h3><a id="fdl-1-section7"></a>
|
</p><h3><a id="fdl-1-section7"/>
|
||||||
7. AGGREGATION WITH INDEPENDENT WORKS
|
7. AGGREGATION WITH INDEPENDENT WORKS
|
||||||
</h3><p>
|
</h3><p>
|
||||||
A compilation of the Document or its derivatives with other separate and
|
A compilation of the Document or its derivatives with other separate and
|
||||||
|
|
@ -325,7 +325,7 @@
|
||||||
bracket the Document within the aggregate, or the electronic equivalent of
|
bracket the Document within the aggregate, or the electronic equivalent of
|
||||||
covers if the Document is in electronic form. Otherwise they must appear
|
covers if the Document is in electronic form. Otherwise they must appear
|
||||||
on printed covers that bracket the whole aggregate.
|
on printed covers that bracket the whole aggregate.
|
||||||
</p><h3><a id="fdl-1-section8"></a>
|
</p><h3><a id="fdl-1-section8"/>
|
||||||
8. TRANSLATION
|
8. TRANSLATION
|
||||||
</h3><p>
|
</h3><p>
|
||||||
Translation is considered a kind of modification, so you may distribute
|
Translation is considered a kind of modification, so you may distribute
|
||||||
|
|
@ -344,7 +344,7 @@
|
||||||
“Dedications”, or “History”, the requirement
|
“Dedications”, or “History”, the requirement
|
||||||
(section 4) to Preserve its Title (section 1) will typically require
|
(section 4) to Preserve its Title (section 1) will typically require
|
||||||
changing the actual title.
|
changing the actual title.
|
||||||
</p><h3><a id="fdl-1-section9"></a>
|
</p><h3><a id="fdl-1-section9"/>
|
||||||
9. TERMINATION
|
9. TERMINATION
|
||||||
</h3><p>
|
</h3><p>
|
||||||
You may not copy, modify, sublicense, or distribute the Document except as
|
You may not copy, modify, sublicense, or distribute the Document except as
|
||||||
|
|
@ -370,14 +370,14 @@
|
||||||
License. If your rights have been terminated and not permanently
|
License. If your rights have been terminated and not permanently
|
||||||
reinstated, receipt of a copy of some or all of the same material does not
|
reinstated, receipt of a copy of some or all of the same material does not
|
||||||
give you any rights to use it.
|
give you any rights to use it.
|
||||||
</p><h3><a id="fdl-1-section10"></a>
|
</p><h3><a id="fdl-1-section10"/>
|
||||||
10. FUTURE REVISIONS OF THIS LICENSE
|
10. FUTURE REVISIONS OF THIS LICENSE
|
||||||
</h3><p>
|
</h3><p>
|
||||||
The Free Software Foundation may publish new, revised versions of the GNU
|
The Free Software Foundation may publish new, revised versions of the GNU
|
||||||
Free Documentation License from time to time. Such new versions will be
|
Free Documentation License from time to time. Such new versions will be
|
||||||
similar in spirit to the present version, but may differ in detail to
|
similar in spirit to the present version, but may differ in detail to
|
||||||
address new problems or concerns. See
|
address new problems or concerns. See
|
||||||
<a class="ulink" href="http://www.gnu.org/copyleft/" target="_top">Copyleft</a>.
|
<a class="link" href="http://www.gnu.org/copyleft/">Copyleft</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Each version of the License is given a distinguishing version number. If
|
Each version of the License is given a distinguishing version number. If
|
||||||
the Document specifies that a particular numbered version of this License
|
the Document specifies that a particular numbered version of this License
|
||||||
|
|
@ -390,7 +390,7 @@
|
||||||
can decide which future versions of this License can be used, that
|
can decide which future versions of this License can be used, that
|
||||||
proxy’s public statement of acceptance of a version permanently
|
proxy’s public statement of acceptance of a version permanently
|
||||||
authorizes you to choose that version for the Document.
|
authorizes you to choose that version for the Document.
|
||||||
</p><h3><a id="fdl-1-section11"></a>
|
</p><h3><a id="fdl-1-section11"/>
|
||||||
11. RELICENSING
|
11. RELICENSING
|
||||||
</h3><p>
|
</h3><p>
|
||||||
“Massive Multiauthor Collaboration Site” (or “MMC
|
“Massive Multiauthor Collaboration Site” (or “MMC
|
||||||
|
|
@ -419,7 +419,7 @@
|
||||||
The operator of an MMC Site may republish an MMC contained in the site
|
The operator of an MMC Site may republish an MMC contained in the site
|
||||||
under CC-BY-SA on the same site at any time before August 1, 2009,
|
under CC-BY-SA on the same site at any time before August 1, 2009,
|
||||||
provided the MMC is eligible for relicensing.
|
provided the MMC is eligible for relicensing.
|
||||||
</p><h3><a id="fdl-1-addendum"></a>
|
</p><h3><a id="fdl-1-addendum"/>
|
||||||
ADDENDUM: How to use this License for your documents
|
ADDENDUM: How to use this License for your documents
|
||||||
</h3><p>
|
</h3><p>
|
||||||
To use this License in a document you have written, include a copy of the
|
To use this License in a document you have written, include a copy of the
|
||||||
|
|
@ -444,6 +444,6 @@ being LIST, and with the Back-Cover Texts being LIST.</pre><p>
|
||||||
recommend releasing these examples in parallel under your choice of free
|
recommend releasing these examples in parallel under your choice of free
|
||||||
software license, such as the GNU General Public License, to permit their
|
software license, such as the GNU General Public License, to permit their
|
||||||
use in free software.
|
use in free software.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix D.
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr><tr><td align="left" valign="top">Appendix D.
|
||||||
<acronym class="acronym">GNU</acronym> General Public License version 3
|
<acronym class="acronym">GNU</acronym> General Public License version 3
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> </td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D. GNU General Public License version 3</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV. Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C. Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Appendix D. GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt04.html" title="Part IV. Appendices"/><link rel="prev" href="appendix_free.html" title="Appendix C. Free Software Needs Free Documentation"/><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D.
|
||||||
<acronym class="acronym">GNU</acronym> General Public License version 3
|
<acronym class="acronym">GNU</acronym> General Public License version 3
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">Part IV.
|
</th></tr><tr><td align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">Part IV.
|
||||||
Appendices
|
Appendices
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix D. GNU General Public License version 3"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.gpl-3.0"></a>Appendix D.
|
</th><td align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr/></div><div class="appendix" title="Appendix D. GNU General Public License version 3"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gpl-3.0"/>
|
||||||
<acronym class="acronym">GNU</acronym> General Public License version 3
|
<acronym class="acronym">GNU</acronym> General Public License version 3
|
||||||
</h2></div></div></div><p>
|
</h1></div></div></div><p>
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
</p><p>
|
</p><p>
|
||||||
Copyright © 2007 Free Software Foundation, Inc.
|
Copyright © 2007 Free Software Foundation, Inc.
|
||||||
<a class="ulink" href="http://www.fsf.org/" target="_top">http://www.fsf.org/</a>
|
<a class="link" href="http://www.fsf.org/">http://www.fsf.org/</a>
|
||||||
</p><p>
|
</p><p>
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||||
document, but changing it is not allowed.
|
document, but changing it is not allowed.
|
||||||
</p><h2><a id="gpl-3-preamble"></a>
|
</p><h2><a id="gpl-3-preamble"/>
|
||||||
Preamble
|
Preamble
|
||||||
</h2><p>
|
</h2><p>
|
||||||
The <acronym class="acronym">GNU</acronym> General Public License is a free, copyleft
|
The <acronym class="acronym">GNU</acronym> General Public License is a free, copyleft
|
||||||
|
|
@ -78,9 +78,9 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
The precise terms and conditions for copying, distribution and modification
|
The precise terms and conditions for copying, distribution and modification
|
||||||
follow.
|
follow.
|
||||||
</p><h2><a id="id487484"></a>
|
</p><h2><a id="id508678"/>
|
||||||
TERMS AND CONDITIONS
|
TERMS AND CONDITIONS
|
||||||
</h2><h2><a id="gpl-3-definitions"></a>
|
</h2><h2><a id="gpl-3-definitions"/>
|
||||||
0. Definitions.
|
0. Definitions.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
“This License” refers to version 3 of the <acronym class="acronym">GNU</acronym>
|
“This License” refers to version 3 of the <acronym class="acronym">GNU</acronym>
|
||||||
|
|
@ -122,7 +122,7 @@
|
||||||
License, and how to view a copy of this License. If the interface presents
|
License, and how to view a copy of this License. If the interface presents
|
||||||
a list of user commands or options, such as a menu, a prominent item in the
|
a list of user commands or options, such as a menu, a prominent item in the
|
||||||
list meets this criterion.
|
list meets this criterion.
|
||||||
</p><h2><a id="SourceCode"></a>
|
</p><h2><a id="SourceCode"/>
|
||||||
1. Source Code.
|
1. Source Code.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
The “source code” for a work means the preferred form of the
|
The “source code” for a work means the preferred form of the
|
||||||
|
|
@ -162,7 +162,7 @@
|
||||||
automatically from other parts of the Corresponding Source.
|
automatically from other parts of the Corresponding Source.
|
||||||
</p><p>
|
</p><p>
|
||||||
The Corresponding Source for a work in source code form is that same work.
|
The Corresponding Source for a work in source code form is that same work.
|
||||||
</p><h2><a id="BasicPermissions"></a>
|
</p><h2><a id="BasicPermissions"/>
|
||||||
2. Basic Permissions.
|
2. Basic Permissions.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
All rights granted under this License are granted for the term of copyright
|
All rights granted under this License are granted for the term of copyright
|
||||||
|
|
@ -187,7 +187,7 @@
|
||||||
Conveying under any other circumstances is permitted solely under the
|
Conveying under any other circumstances is permitted solely under the
|
||||||
conditions stated below. Sublicensing is not allowed; section 10 makes it
|
conditions stated below. Sublicensing is not allowed; section 10 makes it
|
||||||
unnecessary.
|
unnecessary.
|
||||||
</p><h2><a id="Protecting"></a>
|
</p><h2><a id="Protecting"/>
|
||||||
3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
|
3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
No covered work shall be deemed part of an effective technological measure
|
No covered work shall be deemed part of an effective technological measure
|
||||||
|
|
@ -202,7 +202,7 @@
|
||||||
the work as a means of enforcing, against the work’s users, your or
|
the work as a means of enforcing, against the work’s users, your or
|
||||||
third parties’ legal rights to forbid circumvention of technological
|
third parties’ legal rights to forbid circumvention of technological
|
||||||
measures.
|
measures.
|
||||||
</p><h2><a id="ConveyingVerbatim"></a>
|
</p><h2><a id="ConveyingVerbatim"/>
|
||||||
4. Conveying Verbatim Copies.
|
4. Conveying Verbatim Copies.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
You may convey verbatim copies of the Program’s source code as you
|
You may convey verbatim copies of the Program’s source code as you
|
||||||
|
|
@ -215,13 +215,13 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
You may charge any price or no price for each copy that you convey, and you
|
You may charge any price or no price for each copy that you convey, and you
|
||||||
may offer support or warranty protection for a fee.
|
may offer support or warranty protection for a fee.
|
||||||
</p><h2><a id="ConveyingModified"></a>
|
</p><h2><a id="ConveyingModified"/>
|
||||||
5. Conveying Modified Source Versions.
|
5. Conveying Modified Source Versions.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
You may convey a work based on the Program, or the modifications to produce
|
You may convey a work based on the Program, or the modifications to produce
|
||||||
it from the Program, in the form of source code under the terms of section
|
it from the Program, in the form of source code under the terms of section
|
||||||
4, provided that you also meet all of these conditions:
|
4, provided that you also meet all of these conditions:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
The work must carry prominent notices stating that you modified it, and
|
The work must carry prominent notices stating that you modified it, and
|
||||||
giving a relevant date.
|
giving a relevant date.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
|
|
@ -251,13 +251,13 @@
|
||||||
or legal rights of the compilation’s users beyond what the individual works
|
or legal rights of the compilation’s users beyond what the individual works
|
||||||
permit. Inclusion of a covered work in an aggregate does not cause
|
permit. Inclusion of a covered work in an aggregate does not cause
|
||||||
this License to apply to the other parts of the aggregate.
|
this License to apply to the other parts of the aggregate.
|
||||||
</p><h2><a id="ConveyingNonSource"></a>
|
</p><h2><a id="ConveyingNonSource"/>
|
||||||
6. Conveying Non-Source Forms.
|
6. Conveying Non-Source Forms.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
You may convey a covered work in object code form under the terms of
|
You may convey a covered work in object code form under the terms of
|
||||||
sections 4 and 5, provided that you also convey the machine-readable
|
sections 4 and 5, provided that you also convey the machine-readable
|
||||||
Corresponding Source under the terms of this License, in one of these ways:
|
Corresponding Source under the terms of this License, in one of these ways:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
Convey the object code in, or embodied in, a physical product (including
|
Convey the object code in, or embodied in, a physical product (including
|
||||||
a physical distribution medium), accompanied by the Corresponding Source
|
a physical distribution medium), accompanied by the Corresponding Source
|
||||||
fixed on a durable physical medium customarily used for software
|
fixed on a durable physical medium customarily used for software
|
||||||
|
|
@ -346,7 +346,7 @@
|
||||||
(and with an implementation available to the public in source code form),
|
(and with an implementation available to the public in source code form),
|
||||||
and must require no special password or key for unpacking, reading or
|
and must require no special password or key for unpacking, reading or
|
||||||
copying.
|
copying.
|
||||||
</p><h2><a id="AdditionalTerms"></a>
|
</p><h2><a id="AdditionalTerms"/>
|
||||||
7. Additional Terms.
|
7. Additional Terms.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
“Additional permissions” are terms that supplement the terms of
|
“Additional permissions” are terms that supplement the terms of
|
||||||
|
|
@ -368,7 +368,7 @@
|
||||||
Notwithstanding any other provision of this License, for material you add
|
Notwithstanding any other provision of this License, for material you add
|
||||||
to a covered work, you may (if authorized by the copyright holders of that
|
to a covered work, you may (if authorized by the copyright holders of that
|
||||||
material) supplement the terms of this License with terms:
|
material) supplement the terms of this License with terms:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
Disclaiming warranty or limiting liability differently from the terms
|
Disclaiming warranty or limiting liability differently from the terms
|
||||||
of sections 15 and 16 of this License; or
|
of sections 15 and 16 of this License; or
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
|
|
@ -410,7 +410,7 @@
|
||||||
Additional terms, permissive or non-permissive, may be stated in the form
|
Additional terms, permissive or non-permissive, may be stated in the form
|
||||||
of a separately written license, or stated as exceptions; the above
|
of a separately written license, or stated as exceptions; the above
|
||||||
requirements apply either way.
|
requirements apply either way.
|
||||||
</p><h2><a id="gpl-3-termination"></a>
|
</p><h2><a id="gpl-3-termination"/>
|
||||||
8. Termination.
|
8. Termination.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
You may not propagate or modify a covered work except as expressly provided
|
You may not propagate or modify a covered work except as expressly provided
|
||||||
|
|
@ -436,7 +436,7 @@
|
||||||
License. If your rights have been terminated and not permanently
|
License. If your rights have been terminated and not permanently
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
material under section 10.
|
material under section 10.
|
||||||
</p><h2><a id="AcceptanceNotRequired"></a>
|
</p><h2><a id="AcceptanceNotRequired"/>
|
||||||
9. Acceptance Not Required for Having Copies.
|
9. Acceptance Not Required for Having Copies.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
You are not required to accept this License in order to receive or run a
|
You are not required to accept this License in order to receive or run a
|
||||||
|
|
@ -447,7 +447,7 @@
|
||||||
These actions infringe copyright if you do not accept this License.
|
These actions infringe copyright if you do not accept this License.
|
||||||
Therefore, by modifying or propagating a covered work, you indicate your
|
Therefore, by modifying or propagating a covered work, you indicate your
|
||||||
acceptance of this License to do so.
|
acceptance of this License to do so.
|
||||||
</p><h2><a id="AutomaticDownstream"></a>
|
</p><h2><a id="AutomaticDownstream"/>
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
Each time you convey a covered work, the recipient automatically receives a
|
Each time you convey a covered work, the recipient automatically receives a
|
||||||
|
|
@ -472,7 +472,7 @@
|
||||||
or counterclaim in a lawsuit) alleging that any patent claim is infringed
|
or counterclaim in a lawsuit) alleging that any patent claim is infringed
|
||||||
by making, using, selling, offering for sale, or importing the Program or
|
by making, using, selling, offering for sale, or importing the Program or
|
||||||
any portion of it.
|
any portion of it.
|
||||||
</p><h2><a id="Patents"></a>
|
</p><h2><a id="Patents"/>
|
||||||
11. Patents.
|
11. Patents.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
A “contributor” is a copyright holder who authorizes use under
|
A “contributor” is a copyright holder who authorizes use under
|
||||||
|
|
@ -539,7 +539,7 @@
|
||||||
Nothing in this License shall be construed as excluding or limiting any
|
Nothing in this License shall be construed as excluding or limiting any
|
||||||
implied license or other defenses to infringement that may otherwise be
|
implied license or other defenses to infringement that may otherwise be
|
||||||
available to you under applicable patent law.
|
available to you under applicable patent law.
|
||||||
</p><h2><a id="NoSurrender"></a>
|
</p><h2><a id="NoSurrender"/>
|
||||||
12. No Surrender of Others’ Freedom.
|
12. No Surrender of Others’ Freedom.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
If conditions are imposed on you (whether by court order, agreement or
|
||||||
|
|
@ -551,7 +551,7 @@
|
||||||
to collect a royalty for further conveying from those to whom you convey the
|
to collect a royalty for further conveying from those to whom you convey the
|
||||||
Program, the only way you could satisfy both those terms and this License
|
Program, the only way you could satisfy both those terms and this License
|
||||||
would be to refrain entirely from conveying the Program.
|
would be to refrain entirely from conveying the Program.
|
||||||
</p><h2><a id="UsedWithAGPL"></a>
|
</p><h2><a id="UsedWithAGPL"/>
|
||||||
13. Use with the <acronym class="acronym">GNU</acronym> Affero General Public License.
|
13. Use with the <acronym class="acronym">GNU</acronym> Affero General Public License.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
Notwithstanding any other provision of this License, you have permission to
|
Notwithstanding any other provision of this License, you have permission to
|
||||||
|
|
@ -562,7 +562,7 @@
|
||||||
requirements of the <acronym class="acronym">GNU</acronym> Affero General Public License,
|
requirements of the <acronym class="acronym">GNU</acronym> Affero General Public License,
|
||||||
section 13, concerning interaction through a network will apply to the
|
section 13, concerning interaction through a network will apply to the
|
||||||
combination as such.
|
combination as such.
|
||||||
</p><h2><a id="RevisedVersions"></a>
|
</p><h2><a id="RevisedVersions"/>
|
||||||
14. Revised Versions of this License.
|
14. Revised Versions of this License.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
The Free Software Foundation may publish revised and/or new versions of the
|
The Free Software Foundation may publish revised and/or new versions of the
|
||||||
|
|
@ -587,7 +587,7 @@
|
||||||
Later license versions may give you additional or different permissions.
|
Later license versions may give you additional or different permissions.
|
||||||
However, no additional obligations are imposed on any author or copyright
|
However, no additional obligations are imposed on any author or copyright
|
||||||
holder as a result of your choosing to follow a later version.
|
holder as a result of your choosing to follow a later version.
|
||||||
</p><h2><a id="WarrantyDisclaimer"></a>
|
</p><h2><a id="WarrantyDisclaimer"/>
|
||||||
15. Disclaimer of Warranty.
|
15. Disclaimer of Warranty.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
|
||||||
|
|
@ -598,7 +598,7 @@
|
||||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
|
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
|
||||||
YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
|
YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
|
||||||
NECESSARY SERVICING, REPAIR OR CORRECTION.
|
NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
</p><h2><a id="LiabilityLimitation"></a>
|
</p><h2><a id="LiabilityLimitation"/>
|
||||||
16. Limitation of Liability.
|
16. Limitation of Liability.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
|
||||||
|
|
@ -610,7 +610,7 @@
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
SUCH DAMAGES.
|
SUCH DAMAGES.
|
||||||
</p><h2><a id="InterpretationSecs1516"></a>
|
</p><h2><a id="InterpretationSecs1516"/>
|
||||||
17. Interpretation of Sections 15 and 16.
|
17. Interpretation of Sections 15 and 16.
|
||||||
</h2><p>
|
</h2><p>
|
||||||
If the disclaimer of warranty and limitation of liability provided above
|
If the disclaimer of warranty and limitation of liability provided above
|
||||||
|
|
@ -619,9 +619,9 @@
|
||||||
waiver of all civil liability in connection with the Program, unless a
|
waiver of all civil liability in connection with the Program, unless a
|
||||||
warranty or assumption of liability accompanies a copy of the Program in
|
warranty or assumption of liability accompanies a copy of the Program in
|
||||||
return for a fee.
|
return for a fee.
|
||||||
</p><h2><a id="id378663"></a>
|
</p><h2><a id="id509502"/>
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
</h2><h2><a id="HowToApply"></a>
|
</h2><h2><a id="HowToApply"/>
|
||||||
How to Apply These Terms to Your New Programs
|
How to Apply These Terms to Your New Programs
|
||||||
</h2><p>
|
</h2><p>
|
||||||
If you develop a new program, and you want it to be of the greatest possible
|
If you develop a new program, and you want it to be of the greatest possible
|
||||||
|
|
@ -648,7 +648,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
<acronym class="acronym">GNU</acronym> General Public License for more details.
|
<acronym class="acronym">GNU</acronym> General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the <acronym class="acronym">GNU</acronym> General Public License
|
You should have received a copy of the <acronym class="acronym">GNU</acronym> General Public License
|
||||||
along with this program. If not, see <a class="ulink" href="http://www.gnu.org/licenses/" target="_top">http://www.gnu.org/licenses/</a>.
|
along with this program. If not, see <a class="link" href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -669,15 +669,15 @@ under certain conditions; type ‘<code class="literal">show c</code>’ for det
|
||||||
if any, to sign a “copyright disclaimer” for the program, if
|
if any, to sign a “copyright disclaimer” for the program, if
|
||||||
necessary. For more information on this, and how to apply and follow the
|
necessary. For more information on this, and how to apply and follow the
|
||||||
<acronym class="acronym">GNU</acronym> <acronym class="acronym">GPL</acronym>, see
|
<acronym class="acronym">GNU</acronym> <acronym class="acronym">GPL</acronym>, see
|
||||||
<a class="ulink" href="http://www.gnu.org/licenses/" target="_top">http://www.gnu.org/licenses/</a>.
|
<a class="link" href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
The <acronym class="acronym">GNU</acronym> General Public License does not permit
|
The <acronym class="acronym">GNU</acronym> General Public License does not permit
|
||||||
incorporating your program into proprietary programs. If your program is a
|
incorporating your program into proprietary programs. If your program is a
|
||||||
subroutine library, you may consider it more useful to permit linking
|
subroutine library, you may consider it more useful to permit linking
|
||||||
proprietary applications with the library. If this is what you want to do,
|
proprietary applications with the library. If this is what you want to do,
|
||||||
use the <acronym class="acronym">GNU</acronym> Lesser General Public License instead of this
|
use the <acronym class="acronym">GNU</acronym> Lesser General Public License instead of this
|
||||||
License. But first, please read <a class="ulink" href="http://www.gnu.org/philosophy/why-not-lgpl.html" target="_top">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.
|
License. But first, please read <a class="link" href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix C.
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr><tr><td align="left" valign="top">Appendix C.
|
||||||
Free Software Needs Free Documentation
|
Free Software Needs Free Documentation
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="containers.html" title="Chapter 9. Containers" /><link rel="prev" href="containers.html" title="Chapter 9. Containers" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="containers.html" title="Chapter 9. Containers"/><link rel="prev" href="containers.html" title="Chapter 9. Containers"/><link rel="next" href="containers_and_c.html" title="Interacting with C"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
|
||||||
Containers
|
Containers
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Associative"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.associative"></a>Associative</h2></div></div></div><div class="sect2" title="Insertion Hints"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr/></div><div class="section" title="Associative"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers.associative"/>Associative</h2></div></div></div><div class="section" title="Insertion Hints"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"/>Insertion Hints</h3></div></div></div><p>
|
||||||
Section [23.1.2], Table 69, of the C++ standard lists this
|
Section [23.1.2], Table 69, of the C++ standard lists this
|
||||||
function for all of the associative containers (map, set, etc):
|
function for all of the associative containers (map, set, etc):
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
item to insert. The standard says that <span class="quote">“<span class="quote"><code class="code">t</code> is
|
item to insert. The standard says that <span class="quote">“<span class="quote"><code class="code">t</code> is
|
||||||
inserted as close as possible to the position just prior to
|
inserted as close as possible to the position just prior to
|
||||||
<code class="code">p</code>.</span>”</span> (Library DR #233 addresses this topic,
|
<code class="code">p</code>.</span>”</span> (Library DR #233 addresses this topic,
|
||||||
referring to <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html" target="_top">N1780</a>.
|
referring to <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html">N1780</a>.
|
||||||
Since version 4.2 GCC implements the resolution to DR 233, so
|
Since version 4.2 GCC implements the resolution to DR 233, so
|
||||||
that insertions happen as close as possible to the hint. For
|
that insertions happen as close as possible to the hint. For
|
||||||
earlier releases the hint was only used as described below.
|
earlier releases the hint was only used as described below.
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
paragraph. *grin*
|
paragraph. *grin*
|
||||||
</p><p>
|
</p><p>
|
||||||
If the <code class="code">hint</code> parameter ('p' above) is equivalent to:
|
If the <code class="code">hint</code> parameter ('p' above) is equivalent to:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<code class="code">begin()</code>, then the item being inserted should
|
<code class="code">begin()</code>, then the item being inserted should
|
||||||
have a key less than all the other keys in the container.
|
have a key less than all the other keys in the container.
|
||||||
The item will be inserted at the beginning of the container,
|
The item will be inserted at the beginning of the container,
|
||||||
|
|
@ -84,7 +84,7 @@
|
||||||
the new item would in fact belong there. If the hint does not
|
the new item would in fact belong there. If the hint does not
|
||||||
point to the correct place, then no further local searching is
|
point to the correct place, then no further local searching is
|
||||||
done; the search begins from scratch in logarithmic time.
|
done; the search begins from scratch in logarithmic time.
|
||||||
</p></div><div class="sect2" title="bitset"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"></a>bitset</h3></div></div></div><div class="sect3" title="Size Variable"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"></a>Size Variable</h4></div></div></div><p>
|
</p></div><div class="section" title="bitset"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"/>bitset</h3></div></div></div><div class="section" title="Size Variable"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"/>Size Variable</h4></div></div></div><p>
|
||||||
No, you cannot write code of the form
|
No, you cannot write code of the form
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
|
|
@ -102,7 +102,7 @@
|
||||||
There are a couple of ways to handle this kind of thing. Please
|
There are a couple of ways to handle this kind of thing. Please
|
||||||
consider all of them before passing judgement. They include, in
|
consider all of them before passing judgement. They include, in
|
||||||
no chaptericular order:
|
no chaptericular order:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A very large N in <code class="code">bitset<N></code>.</p></li><li class="listitem"><p>A container<bool>.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>A very large N in <code class="code">bitset<N></code>.</p></li><li class="listitem"><p>A container<bool>.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
|
||||||
<span class="emphasis"><em>A very large N in
|
<span class="emphasis"><em>A very large N in
|
||||||
<code class="code">bitset<N></code>. </em></span> It has been
|
<code class="code">bitset<N></code>. </em></span> It has been
|
||||||
pointed out a few times in newsgroups that N bits only takes up
|
pointed out a few times in newsgroups that N bits only takes up
|
||||||
|
|
@ -169,7 +169,7 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
Also note that the implementation of bitset used in libstdc++ has
|
Also note that the implementation of bitset used in libstdc++ has
|
||||||
<a class="link" href="bk01pt03ch21s02.html" title="HP/SGI">some extensions</a>.
|
<a class="link" href="bk01pt03ch21s02.html" title="HP/SGI">some extensions</a>.
|
||||||
</p></div><div class="sect3" title="Type String"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"></a>Type String</h4></div></div></div><p>
|
</p></div><div class="section" title="Type String"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"/>Type String</h4></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
Bitmasks do not take char* nor const char* arguments in their
|
Bitmasks do not take char* nor const char* arguments in their
|
||||||
constructors. This is something of an accident, but you can read
|
constructors. This is something of an accident, but you can read
|
||||||
|
|
@ -186,7 +186,7 @@
|
||||||
instead of
|
instead of
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
std::bitset<5> b ( <span class="quote">“<span class="quote">10110</span>”</span> ); // invalid
|
std::bitset<5> b ( <span class="quote">“<span class="quote">10110</span>”</span> ); // invalid
|
||||||
</pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9.
|
</pre></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="containers.html">Prev</a> </td><td align="center"><a accesskey="u" href="containers.html">Up</a></td><td align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 9.
|
||||||
Containers
|
Containers
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14. Atomics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library , atomic " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 14. Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library , atomic "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="io_and_c.html" title="Interacting with C"/><link rel="next" href="concurrency.html" title="Chapter 15. Concurrency"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14.
|
||||||
Atomics
|
Atomics
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 14. Atomics"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14.
|
</th><td align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 14. Atomics"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"/>Chapter 14.
|
||||||
Atomics
|
Atomics
|
||||||
<a id="id379773" class="indexterm"></a>
|
<a id="id484609" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
|
||||||
Facilities for atomic operations.
|
Facilities for atomic operations.
|
||||||
</p><div class="sect1" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
|
</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics.api"/>API Reference</h2></div></div></div><p>
|
||||||
All items are declared in the standard header
|
All items are declared in the standard header
|
||||||
file <code class="filename">atomic</code>.
|
file <code class="filename">atomic</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
<code class="classname">atomic<int></code>.
|
<code class="classname">atomic<int></code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Full API details.
|
Full API details.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr><tr><td align="left" valign="top">Interacting with C </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 15.
|
||||||
Concurrency
|
Concurrency
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , backwards " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="Appendix C. Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , backwards "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"/><link rel="prev" href="api.html" title="API Evolution and Deprecation History"/><link rel="next" href="appendix_free.html" title="Appendix C. Free Software Needs Free Documentation"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
||||||
Porting and Maintenance
|
Porting and Maintenance
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Backwards Compatibility"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.appendix.porting.backwards"></a>Backwards Compatibility</h2></div></div></div><div class="sect2" title="First"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.first"></a>First</h3></div></div></div><p>The first generation GNU C++ library was called libg++. It was a
|
</th><td align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr/></div><div class="section" title="Backwards Compatibility"><div class="titlepage"><div><div><h2 class="title"><a id="manual.appendix.porting.backwards"/>Backwards Compatibility</h2></div></div></div><div class="section" title="First"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.first"/>First</h3></div></div></div><p>The first generation GNU C++ library was called libg++. It was a
|
||||||
separate GNU project, although reliably paired with GCC. Rumors imply
|
separate GNU project, although reliably paired with GCC. Rumors imply
|
||||||
that it had a working relationship with at least two kinds of
|
that it had a working relationship with at least two kinds of
|
||||||
dinosaur.
|
dinosaur.
|
||||||
|
|
@ -17,8 +17,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
|
really useful things that are used by a lot of people, the Standards
|
||||||
Committee couldn't include everything, and so a lot of those
|
Committee couldn't include everything, and so a lot of those
|
||||||
<span class="quote">“<span class="quote">obvious</span>”</span> classes didn't get included.
|
<span class="quote">“<span class="quote">obvious</span>”</span> classes didn't get included.
|
||||||
</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" title="No ios_base"><div class="titlepage"><div><div><h4 class="title"><a id="id509028"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
|
</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="No ios_base"><div class="titlepage"><div><div><h4 class="title"><a id="id506894"/>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
|
||||||
</p></div><div class="sect3" title="No cout in ostream.h, no cin in istream.h"><div class="titlepage"><div><div><h4 class="title"><a id="id509060"></a>No <code class="code">cout</code> in <code class="code">ostream.h</code>, no <code class="code">cin</code> in <code class="code">istream.h</code></h4></div></div></div><p>
|
</p></div><div class="section" title="No cout in ostream.h, no cin in istream.h"><div class="titlepage"><div><div><h4 class="title"><a id="id506926"/>No <code class="code">cout</code> in <code class="code">ostream.h</code>, no <code class="code">cin</code> in <code class="code">istream.h</code></h4></div></div></div><p>
|
||||||
In earlier versions of the standard,
|
In earlier versions of the standard,
|
||||||
<code class="filename">fstream.h</code>,
|
<code class="filename">fstream.h</code>,
|
||||||
<code class="filename">ostream.h</code>
|
<code class="filename">ostream.h</code>
|
||||||
|
|
@ -29,10 +29,10 @@ Committee couldn't include everything, and so a lot of those
|
||||||
explicitly to get the required definitions.
|
explicitly to get the required definitions.
|
||||||
</p><p> Some include adjustment may be required.</p><p>This project is no longer maintained or supported, and the sources
|
</p><p> Some include adjustment may be required.</p><p>This project is no longer maintained or supported, and the sources
|
||||||
archived. For the desperate,
|
archived. For the desperate,
|
||||||
the <a class="ulink" href="http://gcc.gnu.org/extensions.html" target="_top">GCC extensions
|
the <a class="link" href="http://gcc.gnu.org/extensions.html">GCC extensions
|
||||||
page</a> describes where to find the last libg++ source. The code is
|
page</a> describes where to find the last libg++ source. The code is
|
||||||
considered replaced and rewritten.
|
considered replaced and rewritten.
|
||||||
</p></div></div><div class="sect2" title="Second"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"></a>Second</h3></div></div></div><p>
|
</p></div></div><div class="section" title="Second"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"/>Second</h3></div></div></div><p>
|
||||||
The second generation GNU C++ library was called libstdc++, or
|
The second generation GNU C++ library was called libstdc++, or
|
||||||
libstdc++-v2. It spans the time between libg++ and pre-ISO C++
|
libstdc++-v2. It spans the time between libg++ and pre-ISO C++
|
||||||
standardization and is usually associated with the following GCC
|
standardization and is usually associated with the following GCC
|
||||||
|
|
@ -44,7 +44,7 @@ considered replaced and rewritten.
|
||||||
archived. The code is considered replaced and rewritten.
|
archived. The code is considered replaced and rewritten.
|
||||||
</p><p>
|
</p><p>
|
||||||
Portability notes and known implementation limitations are as follows.
|
Portability notes and known implementation limitations are as follows.
|
||||||
</p><div class="sect3" title="Namespace std:: not supported"><div class="titlepage"><div><div><h4 class="title"><a id="id509158"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
|
</p><div class="section" title="Namespace std:: not supported"><div class="titlepage"><div><div><h4 class="title"><a id="id507029"/>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
|
||||||
Some care is required to support C++ compiler and or library
|
Some care is required to support C++ compiler and or library
|
||||||
implementation that do not have the standard library in
|
implementation that do not have the standard library in
|
||||||
<code class="code">namespace std</code>.
|
<code class="code">namespace std</code>.
|
||||||
|
|
@ -108,10 +108,10 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
|
||||||
AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ])
|
AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
</pre></div><div class="sect3" title="Illegal iterator usage"><div class="titlepage"><div><div><h4 class="title"><a id="id509280"></a>Illegal iterator usage</h4></div></div></div><p>
|
</pre></div><div class="section" title="Illegal iterator usage"><div class="titlepage"><div><div><h4 class="title"><a id="id507155"/>Illegal iterator usage</h4></div></div></div><p>
|
||||||
The following illustrate implementation-allowed illegal iterator
|
The following illustrate implementation-allowed illegal iterator
|
||||||
use, and then correct use.
|
use, and then correct use.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
you cannot do <code class="code">ostream::operator<<(iterator)</code>
|
you cannot do <code class="code">ostream::operator<<(iterator)</code>
|
||||||
to print the address of the iterator => use
|
to print the address of the iterator => use
|
||||||
<code class="code">operator<< &*iterator</code> instead
|
<code class="code">operator<< &*iterator</code> instead
|
||||||
|
|
@ -121,7 +121,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<code class="code">if (iterator)</code> won't work any more => use
|
<code class="code">if (iterator)</code> won't work any more => use
|
||||||
<code class="code">if (iterator != iterator_type())</code>
|
<code class="code">if (iterator != iterator_type())</code>
|
||||||
</p></li></ul></div></div><div class="sect3" title="isspace from cctype is a macro"><div class="titlepage"><div><div><h4 class="title"><a id="id509341"></a><code class="code">isspace</code> from <code class="filename">cctype</code> is a macro
|
</p></li></ul></div></div><div class="section" title="isspace from cctype is a macro"><div class="titlepage"><div><div><h4 class="title"><a id="id507216"/><code class="code">isspace</code> from <code class="filename">cctype</code> is a macro
|
||||||
</h4></div></div></div><p>
|
</h4></div></div></div><p>
|
||||||
Glibc 2.0.x and 2.1.x define <code class="filename">ctype.h</code> functionality as macros
|
Glibc 2.0.x and 2.1.x define <code class="filename">ctype.h</code> functionality as macros
|
||||||
(isspace, isalpha etc.).
|
(isspace, isalpha etc.).
|
||||||
|
|
@ -154,7 +154,7 @@ std:: (__ctype_b[(int) ( ( 'X' ) )] & (unsigned short int) _ISspace ) ;
|
||||||
(<code class="filename">ctype.h</code>) and the
|
(<code class="filename">ctype.h</code>) and the
|
||||||
definitions in namespace <code class="code">std::</code>
|
definitions in namespace <code class="code">std::</code>
|
||||||
(<code class="code"><cctype></code>).
|
(<code class="code"><cctype></code>).
|
||||||
</p></div><div class="sect3" title="No vector::at, deque::at, string::at"><div class="titlepage"><div><div><h4 class="title"><a id="id509434"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
|
</p></div><div class="section" title="No vector::at, deque::at, string::at"><div class="titlepage"><div><div><h4 class="title"><a id="id507312"/>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
|
||||||
One solution is to add an autoconf-test for this:
|
One solution is to add an autoconf-test for this:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
AC_MSG_CHECKING(for container::at)
|
AC_MSG_CHECKING(for container::at)
|
||||||
|
|
@ -180,7 +180,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
|
||||||
</pre><p>
|
</pre><p>
|
||||||
If you are using other (non-GNU) compilers it might be a good idea
|
If you are using other (non-GNU) compilers it might be a good idea
|
||||||
to check for <code class="code">string::at</code> separately.
|
to check for <code class="code">string::at</code> separately.
|
||||||
</p></div><div class="sect3" title="No std::char_traits<char>::eof"><div class="titlepage"><div><div><h4 class="title"><a id="id509472"></a>No <code class="code">std::char_traits<char>::eof</code></h4></div></div></div><p>
|
</p></div><div class="section" title="No std::char_traits<char>::eof"><div class="titlepage"><div><div><h4 class="title"><a id="id507351"/>No <code class="code">std::char_traits<char>::eof</code></h4></div></div></div><p>
|
||||||
Use some kind of autoconf test, plus this:
|
Use some kind of autoconf test, plus this:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
#ifdef HAVE_CHAR_TRAITS
|
#ifdef HAVE_CHAR_TRAITS
|
||||||
|
|
@ -188,7 +188,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
|
||||||
#else
|
#else
|
||||||
#define CPP_EOF EOF
|
#define CPP_EOF EOF
|
||||||
#endif
|
#endif
|
||||||
</pre></div><div class="sect3" title="No string::clear"><div class="titlepage"><div><div><h4 class="title"><a id="id509490"></a>No <code class="code">string::clear</code></h4></div></div></div><p>
|
</pre></div><div class="section" title="No string::clear"><div class="titlepage"><div><div><h4 class="title"><a id="id507369"/>No <code class="code">string::clear</code></h4></div></div></div><p>
|
||||||
There are two functions for deleting the contents of a string:
|
There are two functions for deleting the contents of a string:
|
||||||
<code class="code">clear</code> and <code class="code">erase</code> (the latter returns the
|
<code class="code">clear</code> and <code class="code">erase</code> (the latter returns the
|
||||||
string).
|
string).
|
||||||
|
|
@ -206,18 +206,18 @@ erase(size_type __pos = 0, size_type __n = npos)
|
||||||
Unfortunately, <code class="code">clear</code> is not implemented in this
|
Unfortunately, <code class="code">clear</code> is not implemented in this
|
||||||
version, so you should use <code class="code">erase</code> (which is probably
|
version, so you should use <code class="code">erase</code> (which is probably
|
||||||
faster than <code class="code">operator=(charT*)</code>).
|
faster than <code class="code">operator=(charT*)</code>).
|
||||||
</p></div><div class="sect3" title="Removal of ostream::form and istream::scan extensions"><div class="titlepage"><div><div><h4 class="title"><a id="id384734"></a>
|
</p></div><div class="section" title="Removal of ostream::form and istream::scan extensions"><div class="titlepage"><div><div><h4 class="title"><a id="id507415"/>
|
||||||
Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
|
Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
|
||||||
extensions
|
extensions
|
||||||
</h4></div></div></div><p>
|
</h4></div></div></div><p>
|
||||||
These are no longer supported. Please use stringstreams instead.
|
These are no longer supported. Please use stringstreams instead.
|
||||||
</p></div><div class="sect3" title="No basic_stringbuf, basic_stringstream"><div class="titlepage"><div><div><h4 class="title"><a id="id384753"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
|
</p></div><div class="section" title="No basic_stringbuf, basic_stringstream"><div class="titlepage"><div><div><h4 class="title"><a id="id507434"/>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
|
||||||
Although the ISO standard <code class="code">i/ostringstream</code>-classes are
|
Although the ISO standard <code class="code">i/ostringstream</code>-classes are
|
||||||
provided, (<code class="filename">sstream</code>), for
|
provided, (<code class="filename">sstream</code>), for
|
||||||
compatibility with older implementations the pre-ISO
|
compatibility with older implementations the pre-ISO
|
||||||
<code class="code">i/ostrstream</code> (<code class="filename">strstream</code>) interface is also provided,
|
<code class="code">i/ostrstream</code> (<code class="filename">strstream</code>) interface is also provided,
|
||||||
with these caveats:
|
with these caveats:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<code class="code">strstream</code> is considered to be deprecated
|
<code class="code">strstream</code> is considered to be deprecated
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<code class="code">strstream</code> is limited to <code class="code">char</code>
|
<code class="code">strstream</code> is limited to <code class="code">char</code>
|
||||||
|
|
@ -299,14 +299,14 @@ any = temp;
|
||||||
Another example of using stringstreams is in <a class="link" href="strings.html#strings.string.shrink" title="Shrink to Fit">this howto</a>.
|
Another example of using stringstreams is in <a class="link" href="strings.html#strings.string.shrink" title="Shrink to Fit">this howto</a>.
|
||||||
</p><p> There is additional information in the libstdc++-v2 info files, in
|
</p><p> There is additional information in the libstdc++-v2 info files, in
|
||||||
particular <span class="quote">“<span class="quote">info iostream</span>”</span>.
|
particular <span class="quote">“<span class="quote">info iostream</span>”</span>.
|
||||||
</p></div><div class="sect3" title="Little or no wide character support"><div class="titlepage"><div><div><h4 class="title"><a id="id384904"></a>Little or no wide character support</h4></div></div></div><p>
|
</p></div><div class="section" title="Little or no wide character support"><div class="titlepage"><div><div><h4 class="title"><a id="id507590"/>Little or no wide character support</h4></div></div></div><p>
|
||||||
Classes <code class="classname">wstring</code> and
|
Classes <code class="classname">wstring</code> and
|
||||||
<code class="classname">char_traits<wchar_t></code> are
|
<code class="classname">char_traits<wchar_t></code> are
|
||||||
not supported.
|
not supported.
|
||||||
</p></div><div class="sect3" title="No templatized iostreams"><div class="titlepage"><div><div><h4 class="title"><a id="id384923"></a>No templatized iostreams</h4></div></div></div><p>
|
</p></div><div class="section" title="No templatized iostreams"><div class="titlepage"><div><div><h4 class="title"><a id="id507608"/>No templatized iostreams</h4></div></div></div><p>
|
||||||
Classes <code class="classname">wfilebuf</code> and
|
Classes <code class="classname">wfilebuf</code> and
|
||||||
<code class="classname">wstringstream</code> are not supported.
|
<code class="classname">wstringstream</code> are not supported.
|
||||||
</p></div><div class="sect3" title="Thread safety issues"><div class="titlepage"><div><div><h4 class="title"><a id="id384942"></a>Thread safety issues</h4></div></div></div><p>
|
</p></div><div class="section" title="Thread safety issues"><div class="titlepage"><div><div><h4 class="title"><a id="id507627"/>Thread safety issues</h4></div></div></div><p>
|
||||||
Earlier GCC releases had a somewhat different approach to
|
Earlier GCC releases had a somewhat different approach to
|
||||||
threading configuration and proper compilation. Before GCC 3.0,
|
threading configuration and proper compilation. Before GCC 3.0,
|
||||||
configuration of the threading model was dictated by compiler
|
configuration of the threading model was dictated by compiler
|
||||||
|
|
@ -331,7 +331,7 @@ particular <span class="quote">“<span class="quote">info iostream</span>”</s
|
||||||
against the gthr.h abstraction layer which is provided by gcc. A
|
against the gthr.h abstraction layer which is provided by gcc. A
|
||||||
minor problem that pops up every so often is different
|
minor problem that pops up every so often is different
|
||||||
interpretations of what "thread-safe" means for a
|
interpretations of what "thread-safe" means for a
|
||||||
library (not a general program). We currently use the <a class="ulink" href="http://www.sgi.com/tech/stl/thread_safety.html" target="_top">same
|
library (not a general program). We currently use the <a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html">same
|
||||||
definition that SGI</a> uses for their STL subset. However,
|
definition that SGI</a> uses for their STL subset. However,
|
||||||
the exception for read-only containers only applies to the STL
|
the exception for read-only containers only applies to the STL
|
||||||
components. This definition is widely-used and something similar
|
components. This definition is widely-used and something similar
|
||||||
|
|
@ -342,12 +342,12 @@ particular <span class="quote">“<span class="quote">info iostream</span>”</s
|
||||||
first relevant message in the thread; from there you can use
|
first relevant message in the thread; from there you can use
|
||||||
"Thread Next" to move down the thread. This farm is in
|
"Thread Next" to move down the thread. This farm is in
|
||||||
latest-to-oldest order.
|
latest-to-oldest order.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Our threading expert Loren gives a breakdown of <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html" target="_top">the
|
Our threading expert Loren gives a breakdown of <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
|
||||||
six situations involving threads</a> for the 3.0
|
six situations involving threads</a> for the 3.0
|
||||||
release series.
|
release series.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html" target="_top">
|
<a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
|
||||||
This message</a> inspired a recent updating of issues with
|
This message</a> inspired a recent updating of issues with
|
||||||
threading and the SGI STL library. It also contains some
|
threading and the SGI STL library. It also contains some
|
||||||
example POSIX-multithreaded STL code.
|
example POSIX-multithreaded STL code.
|
||||||
|
|
@ -357,14 +357,14 @@ particular <span class="quote">“<span class="quote">info iostream</span>”</s
|
||||||
few people with access to the backup tapes have been too swamped
|
few people with access to the backup tapes have been too swamped
|
||||||
with work to restore them. Many of the points have been
|
with work to restore them. Many of the points have been
|
||||||
superseded anyhow.)
|
superseded anyhow.)
|
||||||
</p></div></div><div class="sect2" title="Third"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"></a>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
|
</p></div></div><div class="section" title="Third"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"/>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
|
||||||
libstdc++-v3.
|
libstdc++-v3.
|
||||||
</p><p>The subset commonly known as the Standard Template Library
|
</p><p>The subset commonly known as the Standard Template Library
|
||||||
(chapters 23 through 25, mostly) is adapted from the final release
|
(chapters 23 through 25, mostly) is adapted from the final release
|
||||||
of the SGI STL (version 3.3), with extensive changes.
|
of the SGI STL (version 3.3), with extensive changes.
|
||||||
</p><p>A more formal description of the V3 goals can be found in the
|
</p><p>A more formal description of the V3 goals can be found in the
|
||||||
official <a class="link" href="source_design_notes.html" title="Design Notes">design document</a>.
|
official <a class="link" href="source_design_notes.html" title="Design Notes">design document</a>.
|
||||||
</p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" title="Pre-ISO headers moved to backwards or removed"><div class="titlepage"><div><div><h4 class="title"><a id="id385058"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
|
</p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="Pre-ISO headers moved to backwards or removed"><div class="titlepage"><div><div><h4 class="title"><a id="id507752"/>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
|
||||||
(<code class="code">iostream.h</code>, <code class="code">defalloc.h</code> etc.) are
|
(<code class="code">iostream.h</code>, <code class="code">defalloc.h</code> etc.) are
|
||||||
available, unlike previous libstdc++ versions, but inclusion
|
available, unlike previous libstdc++ versions, but inclusion
|
||||||
generates a warning that you are using deprecated headers.
|
generates a warning that you are using deprecated headers.
|
||||||
|
|
@ -373,7 +373,7 @@ libstdc++-v3.
|
||||||
<code class="code">std::</code> into the global namespace.
|
<code class="code">std::</code> into the global namespace.
|
||||||
</p><p>For those of you new to ISO C++ (welcome, time travelers!), no,
|
</p><p>For those of you new to ISO C++ (welcome, time travelers!), no,
|
||||||
that isn't a typo. Yes, the headers really have new names.
|
that isn't a typo. Yes, the headers really have new names.
|
||||||
Marshall Cline's C++ FAQ Lite has a good explanation in <a class="ulink" href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4" target="_top">item
|
Marshall Cline's C++ FAQ Lite has a good explanation in <a class="link" href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4">item
|
||||||
[27.4]</a>.
|
[27.4]</a>.
|
||||||
</p><p> Some include adjustment may be required. What follows is an
|
</p><p> Some include adjustment may be required. What follows is an
|
||||||
autoconf test that defines <code class="code">PRE_STDCXX_HEADERS</code> when they
|
autoconf test that defines <code class="code">PRE_STDCXX_HEADERS</code> when they
|
||||||
|
|
@ -436,7 +436,7 @@ like <code class="filename">vector.h</code> can be replaced with <code class="fi
|
||||||
directive <code class="code">using namespace std;</code> can be put at the global
|
directive <code class="code">using namespace std;</code> can be put at the global
|
||||||
scope. This should be enough to get this code compiling, assuming the
|
scope. This should be enough to get this code compiling, assuming the
|
||||||
other usage is correct.
|
other usage is correct.
|
||||||
</p></div><div class="sect3" title="Extension headers hash_map, hash_set moved to ext or backwards"><div class="titlepage"><div><div><h4 class="title"><a id="id385141"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
|
</p></div><div class="section" title="Extension headers hash_map, hash_set moved to ext or backwards"><div class="titlepage"><div><div><h4 class="title"><a id="id507836"/>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
|
||||||
replaced by standardized libraries.
|
replaced by standardized libraries.
|
||||||
In particular, the unordered_map and unordered_set containers of TR1
|
In particular, the unordered_map and unordered_set containers of TR1
|
||||||
are suitable replacement for the non-standard hash_map and hash_set
|
are suitable replacement for the non-standard hash_map and hash_set
|
||||||
|
|
@ -508,7 +508,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [
|
||||||
AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ])
|
AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
</pre></div><div class="sect3" title="No ios::nocreate/ios::noreplace."><div class="titlepage"><div><div><h4 class="title"><a id="id385242"></a>No <code class="code">ios::nocreate/ios::noreplace</code>.
|
</pre></div><div class="section" title="No ios::nocreate/ios::noreplace."><div class="titlepage"><div><div><h4 class="title"><a id="id507939"/>No <code class="code">ios::nocreate/ios::noreplace</code>.
|
||||||
</h4></div></div></div><p> The existence of <code class="code">ios::nocreate</code> being used for
|
</h4></div></div></div><p> The existence of <code class="code">ios::nocreate</code> being used for
|
||||||
input-streams has been confirmed, most probably because the author
|
input-streams has been confirmed, most probably because the author
|
||||||
thought it would be more correct to specify nocreate explicitly. So
|
thought it would be more correct to specify nocreate explicitly. So
|
||||||
|
|
@ -519,7 +519,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,
|
decide whether you want to create/replace or not. To my knowledge,
|
||||||
even older implementations support <code class="code">app</code>, <code class="code">ate</code>
|
even older implementations support <code class="code">app</code>, <code class="code">ate</code>
|
||||||
and <code class="code">trunc</code> (except for <code class="code">app</code> ?).
|
and <code class="code">trunc</code> (except for <code class="code">app</code> ?).
|
||||||
</p></div><div class="sect3" title="No stream::attach(int fd)"><div class="titlepage"><div><div><h4 class="title"><a id="id380988"></a>
|
</p></div><div class="section" title="No stream::attach(int fd)"><div class="titlepage"><div><div><h4 class="title"><a id="id507987"/>
|
||||||
No <code class="code">stream::attach(int fd)</code>
|
No <code class="code">stream::attach(int fd)</code>
|
||||||
</h4></div></div></div><p>
|
</h4></div></div></div><p>
|
||||||
Phil Edwards writes: It was considered and rejected for the ISO
|
Phil Edwards writes: It was considered and rejected for the ISO
|
||||||
|
|
@ -535,14 +535,14 @@ No <code class="code">stream::attach(int fd)</code>
|
||||||
</p><p>
|
</p><p>
|
||||||
An extension is available that implements this.
|
An extension is available that implements this.
|
||||||
<code class="filename">ext/stdio_filebuf.h</code> contains a derived class called
|
<code class="filename">ext/stdio_filebuf.h</code> contains a derived class called
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html" target="_top"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
|
||||||
This class can be constructed from a C <code class="code">FILE*</code> or a file
|
This class can be constructed from a C <code class="code">FILE*</code> or a file
|
||||||
descriptor, and provides the <code class="code">fd()</code> function.
|
descriptor, and provides the <code class="code">fd()</code> function.
|
||||||
</p><p>
|
</p><p>
|
||||||
For another example of this, refer to
|
For another example of this, refer to
|
||||||
<a class="ulink" href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a>
|
<a class="link" href="http://www.josuttis.com/cppcode/fdstream.html">fdstream example</a>
|
||||||
by Nicolai Josuttis.
|
by Nicolai Josuttis.
|
||||||
</p></div><div class="sect3" title="Support for C++98 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id381051"></a>
|
</p></div><div class="section" title="Support for C++98 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id508055"/>
|
||||||
Support for C++98 dialect.
|
Support for C++98 dialect.
|
||||||
</h4></div></div></div><p>Check for complete library coverage of the C++1998/2003 standard.
|
</h4></div></div></div><p>Check for complete library coverage of the C++1998/2003 standard.
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
|
|
@ -610,7 +610,7 @@ AC_DEFUN([AC_HEADER_STDCXX_98], [
|
||||||
AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ])
|
AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
</pre></div><div class="sect3" title="Support for C++TR1 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id381079"></a>
|
</pre></div><div class="section" title="Support for C++TR1 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id508083"/>
|
||||||
Support for C++TR1 dialect.
|
Support for C++TR1 dialect.
|
||||||
</h4></div></div></div><p>Check for library coverage of the TR1 standard.
|
</h4></div></div></div><p>Check for library coverage of the TR1 standard.
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
|
|
@ -687,7 +687,7 @@ AC_DEFUN([AC_HEADER_TR1_UNORDERED_SET], [
|
||||||
AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ])
|
AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
</pre></div><div class="sect3" title="Support for C++0x dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id381123"></a>
|
</pre></div><div class="section" title="Support for C++0x dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id508127"/>
|
||||||
Support for C++0x dialect.
|
Support for C++0x dialect.
|
||||||
</h4></div></div></div><p>Check for baseline language coverage in the compiler for the C++0xstandard.
|
</h4></div></div></div><p>Check for baseline language coverage in the compiler for the C++0xstandard.
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
|
|
@ -899,31 +899,22 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
|
||||||
AC_DEFINE(HAVE_UNORDERED_SET,,[Define if unordered_set is present. ])
|
AC_DEFINE(HAVE_UNORDERED_SET,,[Define if unordered_set is present. ])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
</pre></div><div class="sect3" title="Container::iterator_type is not necessarily Container::value_type*"><div class="titlepage"><div><div><h4 class="title"><a id="id381200"></a>
|
</pre></div><div class="section" title="Container::iterator_type is not necessarily Container::value_type*"><div class="titlepage"><div><div><h4 class="title"><a id="id508205"/>
|
||||||
Container::iterator_type is not necessarily Container::value_type*
|
Container::iterator_type is not necessarily Container::value_type*
|
||||||
</h4></div></div></div><p>
|
</h4></div></div></div><p>
|
||||||
This is a change in behavior from the previous version. Now, most
|
This is a change in behavior from the previous version. Now, most
|
||||||
<span class="type">iterator_type</span> typedefs in container classes are POD
|
<span class="type">iterator_type</span> typedefs in container classes are POD
|
||||||
objects, not <span class="type">value_type</span> pointers.
|
objects, not <span class="type">value_type</span> pointers.
|
||||||
</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id381229"></a><p><span class="biblioid">
|
</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"/>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id508235"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Migrating to GCC 4.1
|
||||||
Migrating to GCC 4.1
|
</em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="id508261"/><p><span class="biblioid">
|
||||||
</em>
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
</a>
|
Building the Whole Debian Archive with GCC 4.1: A Summary
|
||||||
. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="id381260"></a><p><span class="biblioid">
|
</em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="id508287"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Migration guide for GCC-3.2
|
||||||
Building the Whole Debian Archive with GCC 4.1: A Summary
|
</em>. </span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="api.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr><tr><td align="left" valign="top">API Evolution and Deprecation History </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Appendix C.
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="id381292"></a><p><span class="biblioid">
|
|
||||||
<a class="ulink" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
|
|
||||||
<em class="citetitle">
|
|
||||||
Migration guide for GCC-3.2
|
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API Evolution and Deprecation History </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix C.
|
|
||||||
Free Software Needs Free Documentation
|
Free Software Needs Free Documentation
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>bitmap_allocator</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , allocator " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_allocators.html" title="Chapter 20. Allocators" /><link rel="prev" href="ext_allocators.html" title="Chapter 20. Allocators" /><link rel="next" href="ext_containers.html" title="Chapter 21. Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><th width="60%" align="center">Chapter 20. Allocators</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="bitmap_allocator"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.allocator.bitmap"></a>bitmap_allocator</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , allocator "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_allocators.html" title="Chapter 20. Allocators"/><link rel="prev" href="ext_allocators.html" title="Chapter 20. Allocators"/><link rel="next" href="ext_containers.html" title="Chapter 21. Containers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">bitmap_allocator</th></tr><tr><td align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><th width="60%" align="center">Chapter 20. Allocators</th><td align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr/></div><div class="section" title="bitmap_allocator"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"/>bitmap_allocator</h2></div></div></div><p>
|
||||||
</p><div class="sect2" title="Design"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.bitmap.design"></a>Design</h3></div></div></div><p>
|
</p><div class="section" title="Design"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.bitmap.design"/>Design</h3></div></div></div><p>
|
||||||
As this name suggests, this allocator uses a bit-map to keep track
|
As this name suggests, this allocator uses a bit-map to keep track
|
||||||
of the used and unused memory locations for it's book-keeping
|
of the used and unused memory locations for it's book-keeping
|
||||||
purposes.
|
purposes.
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
Mutex Protection around every allocation/deallocation. The state
|
Mutex Protection around every allocation/deallocation. The state
|
||||||
of the macro is picked up automatically from the gthr abstraction
|
of the macro is picked up automatically from the gthr abstraction
|
||||||
layer.
|
layer.
|
||||||
</p></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.bitmap.impl"></a>Implementation</h3></div></div></div><div class="sect3" title="Free List Store"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h4></div></div></div><p>
|
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.bitmap.impl"/>Implementation</h3></div></div></div><div class="section" title="Free List Store"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.free_list_store"/>Free List Store</h4></div></div></div><p>
|
||||||
The Free List Store (referred to as FLS for the remaining part of this
|
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
|
document) is the Global memory pool that is shared by all instances of
|
||||||
the bitmapped allocator instantiated for any type. This maintains a
|
the bitmapped allocator instantiated for any type. This maintains a
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
this internal fragmentation has to be decided by this function. I
|
this internal fragmentation has to be decided by this function. I
|
||||||
can see 3 possibilities right now. Please add more as and when you
|
can see 3 possibilities right now. Please add more as and when you
|
||||||
find better strategies.
|
find better strategies.
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Equal size check. Return true only when the 2 blocks are of equal
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Equal size check. Return true only when the 2 blocks are of equal
|
||||||
size.</p></li><li class="listitem"><p>Difference Threshold: Return true only when the _block_size is
|
size.</p></li><li class="listitem"><p>Difference Threshold: Return true only when the _block_size is
|
||||||
greater than or equal to the _required_size, and if the _BS is > _RS
|
greater than or equal to the _required_size, and if the _BS is > _RS
|
||||||
by a difference of less than some THRESHOLD value, then return true,
|
by a difference of less than some THRESHOLD value, then return true,
|
||||||
|
|
@ -75,7 +75,7 @@ by a percentage of less than some THRESHOLD value, then return true,
|
||||||
else return false.</p></li></ol></div><p>
|
else return false.</p></li></ol></div><p>
|
||||||
Currently, (3) is being used with a value of 36% Maximum wastage per
|
Currently, (3) is being used with a value of 36% Maximum wastage per
|
||||||
Super Block.
|
Super Block.
|
||||||
</p></div><div class="sect3" title="Super Block"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.super_block"></a>Super Block</h4></div></div></div><p>
|
</p></div><div class="section" title="Super Block"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.super_block"/>Super Block</h4></div></div></div><p>
|
||||||
A super block is the block of memory acquired from the FLS from
|
A super block is the block of memory acquired from the FLS from
|
||||||
which the bitmap allocator carves out memory for single objects
|
which the bitmap allocator carves out memory for single objects
|
||||||
and satisfies the user's requests. These super blocks come in
|
and satisfies the user's requests. These super blocks come in
|
||||||
|
|
@ -90,7 +90,7 @@ else return false.</p></li></ol></div><p>
|
||||||
The super block is contained in the FLS, and the FLS is responsible for
|
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
|
getting / returning Super Bocks to and from the OS using operator new
|
||||||
as defined by the C++ standard.
|
as defined by the C++ standard.
|
||||||
</p></div><div class="sect3" title="Super Block Data Layout"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.super_block_data"></a>Super Block Data Layout</h4></div></div></div><p>
|
</p></div><div class="section" title="Super Block Data Layout"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.super_block_data"/>Super Block Data Layout</h4></div></div></div><p>
|
||||||
Each Super Block will be of some size that is a multiple of the
|
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
|
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
|
Bits_Per_Byte x sizeof(size_t). On an x86 system, this gives the
|
||||||
|
|
@ -103,7 +103,7 @@ else return false.</p></li></ol></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
Consider a block of size 64 ints. In memory, it would look like this:
|
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).
|
(assume a 32-bit system where, size_t is a 32-bit entity).
|
||||||
</p><div class="table"><a id="id376664"></a><p class="title"><b>Table 20.1. Bitmap Allocator Memory Map</b></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -> Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
|
</p><div class="table"><a id="id493853"/><p class="title"><strong>Table 20.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/></colgroup><tbody><tr><td style="text-align: left">268</td><td style="text-align: left">0</td><td style="text-align: left">4294967295</td><td style="text-align: left">4294967295</td><td style="text-align: left">Data -> Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break"/><p>
|
||||||
The first Column(268) represents the size of the Block in bytes as
|
The first Column(268) represents the size of the Block in bytes as
|
||||||
seen by the Bitmap Allocator. Internally, a global free list is
|
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
|
used to keep track of the free blocks used and given back by the
|
||||||
|
|
@ -130,7 +130,7 @@ else return false.</p></li></ol></div><p>
|
||||||
The 3rd 4x2 is size of the bitmap itself, which is the size of 32-bits
|
The 3rd 4x2 is size of the bitmap itself, which is the size of 32-bits
|
||||||
x 2,
|
x 2,
|
||||||
which is 8-bytes, or 2 x sizeof(size_t).
|
which is 8-bytes, or 2 x sizeof(size_t).
|
||||||
</p></div><div class="sect3" title="Maximum Wasted Percentage"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.max_wasted"></a>Maximum Wasted Percentage</h4></div></div></div><p>
|
</p></div><div class="section" title="Maximum Wasted Percentage"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.max_wasted"/>Maximum Wasted Percentage</h4></div></div></div><p>
|
||||||
This has nothing to do with the algorithm per-se,
|
This has nothing to do with the algorithm per-se,
|
||||||
only with some vales that must be chosen correctly to ensure that the
|
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
|
allocator performs well in a real word scenario, and maintains a good
|
||||||
|
|
@ -155,14 +155,14 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%
|
||||||
</p><p>
|
</p><p>
|
||||||
Thus, knowing these values, and based on the sizeof(value_type), we may
|
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.
|
create a function that returns the Max_Wastage_Percentage for us to use.
|
||||||
</p></div><div class="sect3" title="allocate"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.allocate"></a><code class="function">allocate</code></h4></div></div></div><p>
|
</p></div><div class="section" title="allocate"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.allocate"/><code class="function">allocate</code></h4></div></div></div><p>
|
||||||
The allocate function is specialized for single object allocation
|
The allocate function is specialized for single object allocation
|
||||||
ONLY. Thus, ONLY if n == 1, will the bitmap_allocator's
|
ONLY. Thus, ONLY if n == 1, will the bitmap_allocator's
|
||||||
specialized algorithm be used. Otherwise, the request is satisfied
|
specialized algorithm be used. Otherwise, the request is satisfied
|
||||||
directly by calling operator new.
|
directly by calling operator new.
|
||||||
</p><p>
|
</p><p>
|
||||||
Suppose n == 1, then the allocator does the following:
|
Suppose n == 1, then the allocator does the following:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
Checks to see whether a free block exists somewhere in a region
|
Checks to see whether a free block exists somewhere in a region
|
||||||
of memory close to the last satisfied request. If so, then that
|
of memory close to the last satisfied request. If so, then that
|
||||||
block is marked as allocated in the bit map and given to the
|
block is marked as allocated in the bit map and given to the
|
||||||
|
|
@ -175,7 +175,7 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
Is there any block in whatever region of memory that we own
|
Is there any block in whatever region of memory that we own
|
||||||
free? This is done by checking
|
free? This is done by checking
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
The use count for each super block, and if that fails then
|
The use count for each super block, and if that fails then
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
The individual bit-maps for each super block.
|
The individual bit-maps for each super block.
|
||||||
|
|
@ -190,7 +190,7 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%
|
||||||
This process involves Refilling the internal exponentially
|
This process involves Refilling the internal exponentially
|
||||||
growing memory pool. The said effect is achieved by calling
|
growing memory pool. The said effect is achieved by calling
|
||||||
_S_refill_pool which does the following:
|
_S_refill_pool which does the following:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Gets more memory from the Global Free List of the Required
|
Gets more memory from the Global Free List of the Required
|
||||||
size.
|
size.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
|
|
@ -210,13 +210,13 @@ 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
|
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
|
combination of the next-fit and first-fit algorithm optimized ONLY for
|
||||||
single object allocations.
|
single object allocations.
|
||||||
</p></div><div class="sect3" title="deallocate"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.deallocate"></a><code class="function">deallocate</code></h4></div></div></div><p>
|
</p></div><div class="section" title="deallocate"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.deallocate"/><code class="function">deallocate</code></h4></div></div></div><p>
|
||||||
The deallocate function again is specialized for single objects ONLY.
|
The deallocate function again is specialized for single objects ONLY.
|
||||||
For all n belonging to > 1, the operator delete is called without
|
For all n belonging to > 1, the operator delete is called without
|
||||||
further ado, and the deallocate function returns.
|
further ado, and the deallocate function returns.
|
||||||
</p><p>
|
</p><p>
|
||||||
However for n == 1, a series of steps are performed:
|
However for n == 1, a series of steps are performed:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
We first need to locate that super-block which holds the memory
|
We first need to locate that super-block which holds the memory
|
||||||
location given to us by the user. For that purpose, we maintain
|
location given to us by the user. For that purpose, we maintain
|
||||||
a static variable _S_last_dealloc_index, which holds the index
|
a static variable _S_last_dealloc_index, which holds the index
|
||||||
|
|
@ -241,7 +241,7 @@ single object allocations.
|
||||||
the vector. While doing this, we also make sure that the basic
|
the vector. While doing this, we also make sure that the basic
|
||||||
invariant is maintained by making sure that _S_last_request and
|
invariant is maintained by making sure that _S_last_request and
|
||||||
_S_last_dealloc_index point to valid locations within the vector.
|
_S_last_dealloc_index point to valid locations within the vector.
|
||||||
</p></div><div class="sect3" title="Questions"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.questions"></a>Questions</h4></div></div></div><div class="sect4" title="1"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.1"></a>1</h5></div></div></div><p>
|
</p></div><div class="section" title="Questions"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.questions"/>Questions</h4></div></div></div><div class="section" title="1"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.1"/>1</h5></div></div></div><p>
|
||||||
Q1) The "Data Layout" section is
|
Q1) The "Data Layout" section is
|
||||||
cryptic. I have no idea of what you are trying to say. Layout of what?
|
cryptic. I have no idea of what you are trying to say. Layout of what?
|
||||||
The free-list? Each bitmap? The Super Block?
|
The free-list? Each bitmap? The Super Block?
|
||||||
|
|
@ -251,7 +251,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
|
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
|
32 x sizeof(value_type) x 2^n, where n ranges from 0 to 32 for 32-bit
|
||||||
systems.
|
systems.
|
||||||
</p></div><div class="sect4" title="2"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.2"></a>2</h5></div></div></div><p>
|
</p></div><div class="section" title="2"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.2"/>2</h5></div></div></div><p>
|
||||||
And since I just mentioned the
|
And since I just mentioned the
|
||||||
term `each bitmap', what in the world is meant by it? What does each
|
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
|
bitmap manage? How does it relate to the super block? Is the Super
|
||||||
|
|
@ -268,7 +268,7 @@ Block a bitmap as well?
|
||||||
blocks' status. Each bit-map is made up of a number of size_t,
|
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
|
whose exact number for a super-block of a given size I have just
|
||||||
mentioned.
|
mentioned.
|
||||||
</p></div><div class="sect4" title="3"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.3"></a>3</h5></div></div></div><p>
|
</p></div><div class="section" title="3"><div class="titlepage"><div><div><h5 class="title"><a id="bitmap.impl.question.3"/>3</h5></div></div></div><p>
|
||||||
How do the allocate and deallocate functions work in regard to
|
How do the allocate and deallocate functions work in regard to
|
||||||
bitmaps?
|
bitmaps?
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -297,13 +297,13 @@ Block a bitmap as well?
|
||||||
</p><p>
|
</p><p>
|
||||||
The bit-map now looks like this:
|
The bit-map now looks like this:
|
||||||
1111111111111111111111111111111111111111111111111111111111111110
|
1111111111111111111111111111111111111111111111111111111111111110
|
||||||
</p></div></div><div class="sect3" title="Locality"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.locality"></a>Locality</h4></div></div></div><p>
|
</p></div></div><div class="section" title="Locality"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.locality"/>Locality</h4></div></div></div><p>
|
||||||
Another issue would be whether to keep the all bitmaps in a
|
Another issue would be whether to keep the all bitmaps in a
|
||||||
separate area in memory, or to keep them near the actual blocks
|
separate area in memory, or to keep them near the actual blocks
|
||||||
that will be given out or allocated for the client. After some
|
that will be given out or allocated for the client. After some
|
||||||
testing, I've decided to keep these bitmaps close to the actual
|
testing, I've decided to keep these bitmaps close to the actual
|
||||||
blocks. This will help in 2 ways.
|
blocks. This will help in 2 ways.
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Constant time access for the bitmap themselves, since no kind of
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>Constant time access for the bitmap themselves, since no kind of
|
||||||
look up will be needed to find the correct bitmap list or it's
|
look up will be needed to find the correct bitmap list or it's
|
||||||
equivalent.</p></li><li class="listitem"><p>And also this would preserve the cache as far as possible.</p></li></ol></div><p>
|
equivalent.</p></li><li class="listitem"><p>And also this would preserve the cache as far as possible.</p></li></ol></div><p>
|
||||||
So in effect, this kind of an allocator might prove beneficial from a
|
So in effect, this kind of an allocator might prove beneficial from a
|
||||||
|
|
@ -314,7 +314,7 @@ equivalent.</p></li><li class="listitem"><p>And also this would preserve the cac
|
||||||
new_allocator's book keeping overhead is too much for small objects and
|
new_allocator's book keeping overhead is too much for small objects and
|
||||||
single object allocations, though it preserves the locality of blocks
|
single object allocations, though it preserves the locality of blocks
|
||||||
very well when they are returned back to the allocator.
|
very well when they are returned back to the allocator.
|
||||||
</p></div><div class="sect3" title="Overhead and Grow Policy"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.grow_policy"></a>Overhead and Grow Policy</h4></div></div></div><p>
|
</p></div><div class="section" title="Overhead and Grow Policy"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.grow_policy"/>Overhead and Grow Policy</h4></div></div></div><p>
|
||||||
Expected overhead per block would be 1 bit in memory. Also, once
|
Expected overhead per block would be 1 bit in memory. Also, once
|
||||||
the address of the free list has been found, the cost for
|
the address of the free list has been found, the cost for
|
||||||
allocation/deallocation would be negligible, and is supposed to be
|
allocation/deallocation would be negligible, and is supposed to be
|
||||||
|
|
@ -337,4 +337,4 @@ equivalent.</p></li><li class="listitem"><p>And also this would preserve the cac
|
||||||
sizeof(size_t) x 8 which is the number of bits in an integer,
|
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
|
which can fit exactly in a CPU register. Hence, the term given is
|
||||||
exponential growth of the internal pool.
|
exponential growth of the internal pool.
|
||||||
</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_allocators.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. Allocators </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. Containers</td></tr></table></div></body></html>
|
</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_allocators.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 20. Allocators </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 21. Containers</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,46 +1,46 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II. Standard Contents</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4. Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Part II. Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="spine.html" title="The GNU C++ Library Manual"/><link rel="prev" href="debug.html" title="Debugging Support"/><link rel="next" href="support.html" title="Chapter 4. Support"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part II. Standard Contents"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr/></div><div class="part" title="Part II. Standard Contents"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"/>Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="support.html">4.
|
</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4.
|
||||||
Support
|
Support
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="sect2"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="sect1"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="sect1"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="sect2"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect2"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5.
|
||||||
Diagnostics
|
Diagnostics
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
|
||||||
Utilities
|
Utilities
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
|
||||||
Strings
|
Strings
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="sect2"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
|
||||||
Localization
|
Localization
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
|
||||||
Containers
|
Containers
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="sect2"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="sect1"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="sect2"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect2"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="sect1"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
|
||||||
Iterators
|
Iterators
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="sect2"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect2"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="algorithms.html">11.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="algorithms.html">11.
|
||||||
Algorithms
|
Algorithms
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="sect2"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="numerics.html">12.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="numerics.html">12.
|
||||||
Numerics
|
Numerics
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="sect1"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="sect1"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="io.html">13.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="io.html">13.
|
||||||
Input and Output
|
Input and Output
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="sect1"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="sect2"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect2"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="sect1"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="sect1"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="sect1"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect2"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="atomics.html">14.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="atomics.html">14.
|
||||||
Atomics
|
Atomics
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="concurrency.html">15.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="concurrency.html">15.
|
||||||
Concurrency
|
Concurrency
|
||||||
|
|
||||||
</a></span></dt><dd><dl><dt><span class="sect1"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Debugging Support </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4.
|
</a></span></dt><dd><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="debug.html">Prev</a> </td><td align="center"><a accesskey="u" href="spine.html">Up</a></td><td align="right"> <a accesskey="n" href="support.html">Next</a></td></tr><tr><td align="left" valign="top">Debugging Support </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 4.
|
||||||
Support
|
Support
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="diagnostics.html" title="Chapter 5. Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5. Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="diagnostics.html" title="Chapter 5. Diagnostics"/><link rel="prev" href="diagnostics.html" title="Chapter 5. Diagnostics"/><link rel="next" href="utilities.html" title="Chapter 6. Utilities"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5.
|
||||||
Diagnostics
|
Diagnostics
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Concept Checking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.concept_checking"></a>Concept Checking</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr/></div><div class="section" title="Concept Checking"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics.concept_checking"/>Concept Checking</h2></div></div></div><p>
|
||||||
In 1999, SGI added <span class="quote">“<span class="quote">concept checkers</span>”</span> to their
|
In 1999, SGI added <span class="quote">“<span class="quote">concept checkers</span>”</span> to their
|
||||||
implementation of the STL: code which checked the template
|
implementation of the STL: code which checked the template
|
||||||
parameters of instantiated pieces of the STL, in order to insure
|
parameters of instantiated pieces of the STL, in order to insure
|
||||||
|
|
@ -19,9 +19,9 @@
|
||||||
were found in it on more than one occasion.
|
were found in it on more than one occasion.
|
||||||
</p><p>
|
</p><p>
|
||||||
The primary author of the checking code, Jeremy Siek, had already
|
The primary author of the checking code, Jeremy Siek, had already
|
||||||
started work on a replacement implementation. The new code has been
|
started work on a replacement implementation. The new code was
|
||||||
formally reviewed and accepted into
|
formally reviewed and accepted into
|
||||||
<a class="ulink" href="http://www.boost.org/libs/concept_check/concept_check.htm" target="_top">the
|
<a class="link" href="http://www.boost.org/libs/concept_check/concept_check.htm">the
|
||||||
Boost libraries</a>, and we are pleased to incorporate it into the
|
Boost libraries</a>, and we are pleased to incorporate it into the
|
||||||
GNU C++ library.
|
GNU C++ library.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -35,14 +35,16 @@
|
||||||
You can enable them on a per-translation-unit basis with
|
You can enable them on a per-translation-unit basis with
|
||||||
<code class="literal">-D_GLIBCXX_CONCEPT_CHECKS</code>.
|
<code class="literal">-D_GLIBCXX_CONCEPT_CHECKS</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Please note that the upcoming C++ standard has first-class
|
Please note that the checks are based on the requirements in the original
|
||||||
support for template parameter constraints based on concepts in the core
|
C++ standard, some of which have changed in the upcoming C++0x revision.
|
||||||
language. This will obviate the need for the library-simulated concept
|
Additionally, some correct code might be rejected by the concept checks,
|
||||||
checking described above.
|
for example template argument types may need to be complete when used in
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 5.
|
a template definition, rather than at the point of instantiation.
|
||||||
|
There are no plans to address these shortcomings.
|
||||||
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><td align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 5.
|
||||||
Diagnostics
|
Diagnostics
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6.
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 6.
|
||||||
Utilities
|
Utilities
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , debug " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="bk01pt03ch17s03.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Semantics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , debug "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode"/><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode"/><link rel="next" href="bk01pt03ch17s03.html" title="Using"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="Semantics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode.semantics"/>Semantics</h2></div></div></div><p>
|
||||||
</p><p>A program that uses the C++ standard library correctly
|
</p><p>A program that uses the C++ standard library correctly
|
||||||
will maintain the same semantics under debug mode as it had with
|
will maintain the same semantics under debug mode as it had with
|
||||||
the normal (release) library. All functional and exception-handling
|
the normal (release) library. All functional and exception-handling
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
(N.B. In GCC 3.4.x and 4.0.0, due to a bug,
|
(N.B. In GCC 3.4.x and 4.0.0, due to a bug,
|
||||||
<code class="code">-D_GLIBXX_DEBUG_PEDANTIC</code> was also needed. The problem has
|
<code class="code">-D_GLIBXX_DEBUG_PEDANTIC</code> was also needed. The problem has
|
||||||
been fixed in GCC 4.0.1 and later versions.) </p><p>The following library components provide extra debugging
|
been fixed in GCC 4.0.1 and later versions.) </p><p>The following library components provide extra debugging
|
||||||
capabilities in debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">std::basic_string</code> (no safe iterators and see note below)</p></li><li class="listitem"><p><code class="code">std::bitset</code></p></li><li class="listitem"><p><code class="code">std::deque</code></p></li><li class="listitem"><p><code class="code">std::list</code></p></li><li class="listitem"><p><code class="code">std::map</code></p></li><li class="listitem"><p><code class="code">std::multimap</code></p></li><li class="listitem"><p><code class="code">std::multiset</code></p></li><li class="listitem"><p><code class="code">std::set</code></p></li><li class="listitem"><p><code class="code">std::vector</code></p></li><li class="listitem"><p><code class="code">std::unordered_map</code></p></li><li class="listitem"><p><code class="code">std::unordered_multimap</code></p></li><li class="listitem"><p><code class="code">std::unordered_set</code></p></li><li class="listitem"><p><code class="code">std::unordered_multiset</code></p></li></ul></div><p>N.B. although there are precondition checks for some string operations,
|
capabilities in debug mode:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">std::basic_string</code> (no safe iterators and see note below)</p></li><li class="listitem"><p><code class="code">std::bitset</code></p></li><li class="listitem"><p><code class="code">std::deque</code></p></li><li class="listitem"><p><code class="code">std::list</code></p></li><li class="listitem"><p><code class="code">std::map</code></p></li><li class="listitem"><p><code class="code">std::multimap</code></p></li><li class="listitem"><p><code class="code">std::multiset</code></p></li><li class="listitem"><p><code class="code">std::set</code></p></li><li class="listitem"><p><code class="code">std::vector</code></p></li><li class="listitem"><p><code class="code">std::unordered_map</code></p></li><li class="listitem"><p><code class="code">std::unordered_multimap</code></p></li><li class="listitem"><p><code class="code">std::unordered_set</code></p></li><li class="listitem"><p><code class="code">std::unordered_multiset</code></p></li></ul></div><p>N.B. although there are precondition checks for some string operations,
|
||||||
e.g. <code class="code">operator[]</code>,
|
e.g. <code class="code">operator[]</code>,
|
||||||
they will not always be run when using the <code class="code">char</code> and
|
they will not always be run when using the <code class="code">char</code> and
|
||||||
<code class="code">wchar_t</code> specialisations (<code class="code">std::string</code> and
|
<code class="code">wchar_t</code> specialisations (<code class="code">std::string</code> and
|
||||||
|
|
@ -52,4 +52,4 @@ with the debug-mode checks included, but this is unsupported and not
|
||||||
guaranteed to work. For full debug-mode support you can use the
|
guaranteed to work. For full debug-mode support you can use the
|
||||||
<code class="code">__gnu_debug::basic_string</code> debugging container directly,
|
<code class="code">__gnu_debug::basic_string</code> debugging container directly,
|
||||||
which always works correctly.
|
which always works correctly.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Debug Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><td align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 17. Debug Mode </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Using</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , debug " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="bk01pt03ch17s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch17s04.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Using"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , debug "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode"/><link rel="prev" href="bk01pt03ch17s02.html" title="Semantics"/><link rel="next" href="bk01pt03ch17s04.html" title="Design"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr></table><hr/></div><div class="section" title="Using"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode.using"/>Using</h2></div></div></div><p>
|
||||||
</p><div class="sect2" title="Using the Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"></a>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
|
</p><div class="section" title="Using the Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"/>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
|
||||||
compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
|
compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
|
||||||
changes the sizes and behavior of standard class templates such
|
changes the sizes and behavior of standard class templates such
|
||||||
as <code class="code">std::vector</code>, and therefore you can only link code
|
as <code class="code">std::vector</code>, and therefore you can only link code
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
units.</p><p>By default, error messages are formatted to fit on lines of about
|
units.</p><p>By default, error messages are formatted to fit on lines of about
|
||||||
78 characters. The environment variable
|
78 characters. The environment variable
|
||||||
<code class="code">GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
|
<code class="code">GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
|
||||||
different length.</p></div><div class="sect2" title="Using a Specific Debug Container"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"></a>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
|
different length.</p></div><div class="section" title="Using a Specific Debug Container"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"/>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
|
||||||
only specific containers need checking, debugging containers are
|
only specific containers need checking, debugging containers are
|
||||||
available as GNU extensions. These debugging containers are
|
available as GNU extensions. These debugging containers are
|
||||||
functionally equivalent to the standard drop-in containers used in
|
functionally equivalent to the standard drop-in containers used in
|
||||||
|
|
@ -19,6 +19,6 @@
|
||||||
mode or with debug mode. The
|
mode or with debug mode. The
|
||||||
following table provides the names and headers of the debugging
|
following table provides the names and headers of the debugging
|
||||||
containers:
|
containers:
|
||||||
</p><div class="table"><a id="id419645"></a><p class="title"><b>Table 17.1. Debugging Containers</b></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename"><debug/bitset></code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename"><debug/deque></code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename"><debug/list></code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename"><debug/map></code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename"><debug/map></code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename"><debug/set></code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename"><debug/set></code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename"><debug/string></code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename"><debug/string></code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename"><debug/string></code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename"><debug/vector></code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++0x mode, these additional
|
</p><div class="table"><a id="id485445"/><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Container</th><th style="text-align: left">Header</th><th style="text-align: left">Debug container</th><th style="text-align: left">Debug header</th></tr></thead><tbody><tr><td style="text-align: left"><code class="classname">std::bitset</code></td><td style="text-align: left"><code class="filename">bitset</code></td><td style="text-align: left"><code class="classname">__gnu_debug::bitset</code></td><td style="text-align: left"><code class="filename"><debug/bitset></code></td></tr><tr><td style="text-align: left"><code class="classname">std::deque</code></td><td style="text-align: left"><code class="filename">deque</code></td><td style="text-align: left"><code class="classname">__gnu_debug::deque</code></td><td style="text-align: left"><code class="filename"><debug/deque></code></td></tr><tr><td style="text-align: left"><code class="classname">std::list</code></td><td style="text-align: left"><code class="filename">list</code></td><td style="text-align: left"><code class="classname">__gnu_debug::list</code></td><td style="text-align: left"><code class="filename"><debug/list></code></td></tr><tr><td style="text-align: left"><code class="classname">std::map</code></td><td style="text-align: left"><code class="filename">map</code></td><td style="text-align: left"><code class="classname">__gnu_debug::map</code></td><td style="text-align: left"><code class="filename"><debug/map></code></td></tr><tr><td style="text-align: left"><code class="classname">std::multimap</code></td><td style="text-align: left"><code class="filename">map</code></td><td style="text-align: left"><code class="classname">__gnu_debug::multimap</code></td><td style="text-align: left"><code class="filename"><debug/map></code></td></tr><tr><td style="text-align: left"><code class="classname">std::multiset</code></td><td style="text-align: left"><code class="filename">set</code></td><td style="text-align: left"><code class="classname">__gnu_debug::multiset</code></td><td style="text-align: left"><code class="filename"><debug/set></code></td></tr><tr><td style="text-align: left"><code class="classname">std::set</code></td><td style="text-align: left"><code class="filename">set</code></td><td style="text-align: left"><code class="classname">__gnu_debug::set</code></td><td style="text-align: left"><code class="filename"><debug/set></code></td></tr><tr><td style="text-align: left"><code class="classname">std::string</code></td><td style="text-align: left"><code class="filename">string</code></td><td style="text-align: left"><code class="classname">__gnu_debug::string</code></td><td style="text-align: left"><code class="filename"><debug/string></code></td></tr><tr><td style="text-align: left"><code class="classname">std::wstring</code></td><td style="text-align: left"><code class="filename">string</code></td><td style="text-align: left"><code class="classname">__gnu_debug::wstring</code></td><td style="text-align: left"><code class="filename"><debug/string></code></td></tr><tr><td style="text-align: left"><code class="classname">std::basic_string</code></td><td style="text-align: left"><code class="filename">string</code></td><td style="text-align: left"><code class="classname">__gnu_debug::basic_string</code></td><td style="text-align: left"><code class="filename"><debug/string></code></td></tr><tr><td style="text-align: left"><code class="classname">std::vector</code></td><td style="text-align: left"><code class="filename">vector</code></td><td style="text-align: left"><code class="classname">__gnu_debug::vector</code></td><td style="text-align: left"><code class="filename"><debug/vector></code></td></tr></tbody></table></div></div><br class="table-break"/><p>In addition, when compiling in C++0x mode, these additional
|
||||||
containers have additional debug capability.
|
containers have additional debug capability.
|
||||||
</p><div class="table"><a id="id391116"></a><p class="title"><b>Table 17.2. Debugging Containers C++0x</b></p><div class="table-contents"><table summary="Debugging Containers C++0x" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename"><debug/unordered_map></code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename"><debug/unordered_map></code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename"><debug/unordered_set></code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename"><debug/unordered_set></code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
|
</p><div class="table"><a id="id485819"/><p class="title"><strong>Table 17.2. Debugging Containers C++0x</strong></p><div class="table-contents"><table summary="Debugging Containers C++0x" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/></colgroup><thead><tr><th style="text-align: left">Container</th><th style="text-align: left">Header</th><th style="text-align: left">Debug container</th><th style="text-align: left">Debug header</th></tr></thead><tbody><tr><td style="text-align: left"><code class="classname">std::unordered_map</code></td><td style="text-align: left"><code class="filename">unordered_map</code></td><td style="text-align: left"><code class="classname">__gnu_debug::unordered_map</code></td><td style="text-align: left"><code class="filename"><debug/unordered_map></code></td></tr><tr><td style="text-align: left"><code class="classname">std::unordered_multimap</code></td><td style="text-align: left"><code class="filename">unordered_map</code></td><td style="text-align: left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td style="text-align: left"><code class="filename"><debug/unordered_map></code></td></tr><tr><td style="text-align: left"><code class="classname">std::unordered_set</code></td><td style="text-align: left"><code class="filename">unordered_set</code></td><td style="text-align: left"><code class="classname">__gnu_debug::unordered_set</code></td><td style="text-align: left"><code class="filename"><debug/unordered_set></code></td></tr><tr><td style="text-align: left"><code class="classname">std::unordered_multiset</code></td><td style="text-align: left"><code class="filename">unordered_set</code></td><td style="text-align: left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td style="text-align: left"><code class="filename"><debug/unordered_set></code></td></tr></tbody></table></div></div><br class="table-break"/></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr><tr><td align="left" valign="top">Semantics </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Design</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , debug " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="bk01pt03ch17s03.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , debug "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode"/><link rel="prev" href="bk01pt03ch17s03.html" title="Using"/><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr/></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode.design"/>Design</h2></div></div></div><p>
|
||||||
</p><div class="sect2" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
|
</p><div class="section" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"/>Goals</h3></div></div></div><p>
|
||||||
</p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
|
</p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
|
||||||
containers and iterators with semantically equivalent safe standard
|
containers and iterators with semantically equivalent safe standard
|
||||||
containers and iterators to aid in debugging user programs. The
|
containers and iterators to aid in debugging user programs. The
|
||||||
following goals directed the design of the libstdc++ debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Correctness</em></span>: the libstdc++ debug mode must not change
|
following goals directed the design of the libstdc++ debug mode:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Correctness</em></span>: the libstdc++ debug mode must not change
|
||||||
the semantics of the standard library for all cases specified in
|
the semantics of the standard library for all cases specified in
|
||||||
the ANSI/ISO C++ standard. The essence of this constraint is that
|
the ANSI/ISO C++ standard. The essence of this constraint is that
|
||||||
any valid C++ program should behave in the same manner regardless
|
any valid C++ program should behave in the same manner regardless
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
higher-numbered conformance levels are more usable (i.e., require
|
higher-numbered conformance levels are more usable (i.e., require
|
||||||
less recompilation) but are more complicated to implement than
|
less recompilation) but are more complicated to implement than
|
||||||
the lower-numbered conformance levels.
|
the lower-numbered conformance levels.
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><span class="emphasis"><em>Full recompilation</em></span>: The user must recompile his or
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p><span class="emphasis"><em>Full recompilation</em></span>: The user must recompile his or
|
||||||
her entire application and all C++ libraries it depends on,
|
her entire application and all C++ libraries it depends on,
|
||||||
including the C++ standard library that ships with the
|
including the C++ standard library that ships with the
|
||||||
compiler. This must be done even if only a small part of the
|
compiler. This must be done even if only a small part of the
|
||||||
|
|
@ -89,10 +89,10 @@
|
||||||
(performance regression) or allocating extra memory associated
|
(performance regression) or allocating extra memory associated
|
||||||
with each iterator with <code class="code">new</code> (changes the program
|
with each iterator with <code class="code">new</code> (changes the program
|
||||||
semantics).</p></li></ol></div><p>
|
semantics).</p></li></ol></div><p>
|
||||||
</p></li></ul></div></div><div class="sect2" title="Methods"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.methods"></a>Methods</h3></div></div></div><p>
|
</p></li></ul></div></div><div class="section" title="Methods"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.methods"/>Methods</h3></div></div></div><p>
|
||||||
</p><p>This section provides an overall view of the design of the
|
</p><p>This section provides an overall view of the design of the
|
||||||
libstdc++ debug mode and details the relationship between design
|
libstdc++ debug mode and details the relationship between design
|
||||||
decisions and the stated design goals.</p><div class="sect3" title="The Wrapper Model"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.wrappers"></a>The Wrapper Model</h4></div></div></div><p>The libstdc++ debug mode uses a wrapper model where the
|
decisions and the stated design goals.</p><div class="section" title="The Wrapper Model"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.wrappers"/>The Wrapper Model</h4></div></div></div><p>The libstdc++ debug mode uses a wrapper model where the
|
||||||
debugging versions of library components (e.g., iterators and
|
debugging versions of library components (e.g., iterators and
|
||||||
containers) form a layer on top of the release versions of the
|
containers) form a layer on top of the release versions of the
|
||||||
library components. The debugging components first verify that the
|
library components. The debugging components first verify that the
|
||||||
|
|
@ -109,19 +109,19 @@
|
||||||
their associated containers, which are necessary to detect certain
|
their associated containers, which are necessary to detect certain
|
||||||
types of standard library usage errors such as dereferencing
|
types of standard library usage errors such as dereferencing
|
||||||
past-the-end iterators or inserting into a container using an
|
past-the-end iterators or inserting into a container using an
|
||||||
iterator from a different container.</p><div class="sect4" title="Safe Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_iter"></a>Safe Iterators</h5></div></div></div><p>Iterator wrappers provide a debugging layer over any iterator that
|
iterator from a different container.</p><div class="section" title="Safe Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_iter"/>Safe Iterators</h5></div></div></div><p>Iterator wrappers provide a debugging layer over any iterator that
|
||||||
is attached to a particular container, and will manage the
|
is attached to a particular container, and will manage the
|
||||||
information detailing the iterator's state (singular,
|
information detailing the iterator's state (singular,
|
||||||
dereferenceable, etc.) and tracking the container to which the
|
dereferenceable, etc.) and tracking the container to which the
|
||||||
iterator is attached. Because iterators have a well-defined, common
|
iterator is attached. Because iterators have a well-defined, common
|
||||||
interface the iterator wrapper is implemented with the iterator
|
interface the iterator wrapper is implemented with the iterator
|
||||||
adaptor class template <code class="code">__gnu_debug::_Safe_iterator</code>,
|
adaptor class template <code class="code">__gnu_debug::_Safe_iterator</code>,
|
||||||
which takes two template parameters:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">Iterator</code>: The underlying iterator type, which must
|
which takes two template parameters:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">Iterator</code>: The underlying iterator type, which must
|
||||||
be either the <code class="code">iterator</code> or <code class="code">const_iterator</code>
|
be either the <code class="code">iterator</code> or <code class="code">const_iterator</code>
|
||||||
typedef from the sequence type this iterator can reference.</p></li><li class="listitem"><p><code class="code">Sequence</code>: The type of sequence that this iterator
|
typedef from the sequence type this iterator can reference.</p></li><li class="listitem"><p><code class="code">Sequence</code>: The type of sequence that this iterator
|
||||||
references. This sequence must be a safe sequence (discussed below)
|
references. This sequence must be a safe sequence (discussed below)
|
||||||
whose <code class="code">iterator</code> or <code class="code">const_iterator</code> typedef
|
whose <code class="code">iterator</code> or <code class="code">const_iterator</code> typedef
|
||||||
is the type of the safe iterator.</p></li></ul></div></div><div class="sect4" title="Safe Sequences (Containers)"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_seq"></a>Safe Sequences (Containers)</h5></div></div></div><p>Container wrappers provide a debugging layer over a particular
|
is the type of the safe iterator.</p></li></ul></div></div><div class="section" title="Safe Sequences (Containers)"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_seq"/>Safe Sequences (Containers)</h5></div></div></div><p>Container wrappers provide a debugging layer over a particular
|
||||||
container type. Because containers vary greatly in the member
|
container type. Because containers vary greatly in the member
|
||||||
functions they support and the semantics of those member functions
|
functions they support and the semantics of those member functions
|
||||||
(especially in the area of iterator invalidation), container
|
(especially in the area of iterator invalidation), container
|
||||||
|
|
@ -157,7 +157,7 @@ template<typename _Tp, typename _Allocator = allocator<_Tp>
|
||||||
|
|
||||||
// duplicate std::list interface with debugging semantics
|
// duplicate std::list interface with debugging semantics
|
||||||
};
|
};
|
||||||
</pre></div></div><div class="sect3" title="Precondition Checking"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.precond"></a>Precondition Checking</h4></div></div></div><p>The debug mode operates primarily by checking the preconditions of
|
</pre></div></div><div class="section" title="Precondition Checking"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.precond"/>Precondition Checking</h4></div></div></div><p>The debug mode operates primarily by checking the preconditions of
|
||||||
all standard library operations that it supports. Preconditions that
|
all standard library operations that it supports. Preconditions that
|
||||||
are always checked (regardless of whether or not we are in debug
|
are always checked (regardless of whether or not we are in debug
|
||||||
mode) are checked via the <code class="code">__check_xxx</code> macros defined
|
mode) are checked via the <code class="code">__check_xxx</code> macros defined
|
||||||
|
|
@ -184,7 +184,7 @@ template<typename _Tp, typename _Allocator = allocator<_Tp>
|
||||||
cousin <code class="code">_GLIBCXX_DEBUG_PEDASSERT</code>, or the assertion
|
cousin <code class="code">_GLIBCXX_DEBUG_PEDASSERT</code>, or the assertion
|
||||||
check macro that supports more advance formulation of error
|
check macro that supports more advance formulation of error
|
||||||
messages, <code class="code">_GLIBCXX_DEBUG_VERIFY</code>. These macros are
|
messages, <code class="code">_GLIBCXX_DEBUG_VERIFY</code>. These macros are
|
||||||
documented more thoroughly in the debug mode source code.</p></div><div class="sect3" title="Release- and debug-mode coexistence"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.coexistence"></a>Release- and debug-mode coexistence</h4></div></div></div><p>The libstdc++ debug mode is the first debug mode we know of that
|
documented more thoroughly in the debug mode source code.</p></div><div class="section" title="Release- and debug-mode coexistence"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.coexistence"/>Release- and debug-mode coexistence</h4></div></div></div><p>The libstdc++ debug mode is the first debug mode we know of that
|
||||||
is able to provide the "Per-use recompilation" (4) guarantee, that
|
is able to provide the "Per-use recompilation" (4) guarantee, that
|
||||||
allows release-compiled and debug-compiled code to be linked and
|
allows release-compiled and debug-compiled code to be linked and
|
||||||
executed together without causing unpredictable behavior. This
|
executed together without causing unpredictable behavior. This
|
||||||
|
|
@ -194,13 +194,13 @@ template<typename _Tp, typename _Allocator = allocator<_Tp>
|
||||||
environments by minimizing dependencies.</p><p>Achieving link- and run-time coexistence is not a trivial
|
environments by minimizing dependencies.</p><p>Achieving link- and run-time coexistence is not a trivial
|
||||||
implementation task. To achieve this goal we required a small
|
implementation task. To achieve this goal we required a small
|
||||||
extension to the GNU C++ compiler (since incorporated into the C++0x language specification, described in the GCC Manual for the C++ language as
|
extension to the GNU C++ compiler (since incorporated into the C++0x language specification, described in the GCC Manual for the C++ language as
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Namespace-Association.html#Namespace-Association" target="_top">namespace
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Namespace-Association.html#Namespace-Association">namespace
|
||||||
association</a>), and a complex organization of debug- and
|
association</a>), and a complex organization of debug- and
|
||||||
release-modes. The end result is that we have achieved per-use
|
release-modes. The end result is that we have achieved per-use
|
||||||
recompilation but have had to give up some checking of the
|
recompilation but have had to give up some checking of the
|
||||||
<code class="code">std::basic_string</code> class template (namely, safe
|
<code class="code">std::basic_string</code> class template (namely, safe
|
||||||
iterators).
|
iterators).
|
||||||
</p><div class="sect4" title="Compile-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.compile"></a>Compile-time coexistence of release- and debug-mode components</h5></div></div></div><p>Both the release-mode components and the debug-mode
|
</p><div class="section" title="Compile-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.compile"/>Compile-time coexistence of release- and debug-mode components</h5></div></div></div><p>Both the release-mode components and the debug-mode
|
||||||
components need to exist within a single translation unit so that
|
components need to exist within a single translation unit so that
|
||||||
the debug versions can wrap the release versions. However, only one
|
the debug versions can wrap the release versions. However, only one
|
||||||
of these components should be user-visible at any particular
|
of these components should be user-visible at any particular
|
||||||
|
|
@ -221,7 +221,7 @@ namespace std
|
||||||
};
|
};
|
||||||
} // namespace std
|
} // namespace std
|
||||||
</pre><p>In debug mode we include the release-mode container (which is now
|
</pre><p>In debug mode we include the release-mode container (which is now
|
||||||
defined in the namespace <code class="code">__norm</code>) and also the
|
defined in the namespace <code class="code">__cxx1998</code>) and also the
|
||||||
debug-mode container. The debug-mode container is defined within the
|
debug-mode container. The debug-mode container is defined within the
|
||||||
namespace <code class="code">__debug</code>, which is associated with namespace
|
namespace <code class="code">__debug</code>, which is associated with namespace
|
||||||
<code class="code">std</code> via the C++0x namespace association language feature. This
|
<code class="code">std</code> via the C++0x namespace association language feature. This
|
||||||
|
|
@ -231,7 +231,7 @@ maintenance burden, while minimizing confusion. Again, this boils down
|
||||||
to C++ code as follows:</p><pre class="programlisting">
|
to C++ code as follows:</p><pre class="programlisting">
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
namespace __norm
|
namespace __cxx1998
|
||||||
{
|
{
|
||||||
template<typename _Tp, typename _Alloc = allocator<_Tp> >
|
template<typename _Tp, typename _Alloc = allocator<_Tp> >
|
||||||
class list
|
class list
|
||||||
|
|
@ -244,17 +244,17 @@ namespace std
|
||||||
{
|
{
|
||||||
template<typename _Tp, typename _Alloc = allocator<_Tp> >
|
template<typename _Tp, typename _Alloc = allocator<_Tp> >
|
||||||
class list
|
class list
|
||||||
: public __norm::list<_Tp, _Alloc>,
|
: public __cxx1998::list<_Tp, _Alloc>,
|
||||||
public __gnu_debug::_Safe_sequence<list<_Tp, _Alloc> >
|
public __gnu_debug::_Safe_sequence<list<_Tp, _Alloc> >
|
||||||
{
|
{
|
||||||
// ...
|
// ...
|
||||||
};
|
};
|
||||||
} // namespace __norm
|
} // namespace __cxx1998
|
||||||
|
|
||||||
// namespace __debug __attribute__ ((strong));
|
// namespace __debug __attribute__ ((strong));
|
||||||
inline namespace __debug { }
|
inline namespace __debug { }
|
||||||
}
|
}
|
||||||
</pre></div><div class="sect4" title="Link- and run-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and
|
</pre></div><div class="section" title="Link- and run-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"/>Link- and run-time coexistence of release- and
|
||||||
debug-mode components</h5></div></div></div><p>Because each component has a distinct and separate release and
|
debug-mode components</h5></div></div></div><p>Because each component has a distinct and separate release and
|
||||||
debug implementation, there is no issue with link-time
|
debug implementation, there is no issue with link-time
|
||||||
coexistence: the separate namespaces result in different mangled
|
coexistence: the separate namespaces result in different mangled
|
||||||
|
|
@ -301,7 +301,7 @@ test02()
|
||||||
release-mode <code class="code">basic_string</code>? While the answer could be
|
release-mode <code class="code">basic_string</code>? While the answer could be
|
||||||
"both", and the difference hidden via renaming a la the
|
"both", and the difference hidden via renaming a la the
|
||||||
debug/release containers, we must note two things about locale
|
debug/release containers, we must note two things about locale
|
||||||
facets:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>They exist as shared state: one can create a facet in one
|
facets:</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>They exist as shared state: one can create a facet in one
|
||||||
translation unit and access the facet via the same type name in a
|
translation unit and access the facet via the same type name in a
|
||||||
different translation unit. This means that we cannot have two
|
different translation unit. This means that we cannot have two
|
||||||
different versions of locale facets, because the types would not be
|
different versions of locale facets, because the types would not be
|
||||||
|
|
@ -316,10 +316,10 @@ test02()
|
||||||
changes. The effect on users is expected to be minimal, as there are
|
changes. The effect on users is expected to be minimal, as there are
|
||||||
simple alternatives (e.g., <code class="code">__gnu_debug::basic_string</code>),
|
simple alternatives (e.g., <code class="code">__gnu_debug::basic_string</code>),
|
||||||
and the usability benefit we gain from the ability to mix debug- and
|
and the usability benefit we gain from the ability to mix debug- and
|
||||||
release-compiled translation units is enormous.</p></div><div class="sect4" title="Alternatives for Coexistence"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.alt"></a>Alternatives for Coexistence</h5></div></div></div><p>The coexistence scheme above was chosen over many alternatives,
|
release-compiled translation units is enormous.</p></div><div class="section" title="Alternatives for Coexistence"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.alt"/>Alternatives for Coexistence</h5></div></div></div><p>The coexistence scheme above was chosen over many alternatives,
|
||||||
including language-only solutions and solutions that also required
|
including language-only solutions and solutions that also required
|
||||||
extensions to the C++ front end. The following is a partial list of
|
extensions to the C++ front end. The following is a partial list of
|
||||||
solutions, with justifications for our rejection of each.</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Completely separate debug/release libraries</em></span>: This is by
|
solutions, with justifications for our rejection of each.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Completely separate debug/release libraries</em></span>: This is by
|
||||||
far the simplest implementation option, where we do not allow any
|
far the simplest implementation option, where we do not allow any
|
||||||
coexistence of debug- and release-compiled translation units in a
|
coexistence of debug- and release-compiled translation units in a
|
||||||
program. This solution has an extreme negative affect on usability,
|
program. This solution has an extreme negative affect on usability,
|
||||||
|
|
@ -353,7 +353,7 @@ test02()
|
||||||
declarations disallow specialization. This method fails
|
declarations disallow specialization. This method fails
|
||||||
the <span class="emphasis"><em>correctness</em></span> criteria.</p></li><li class="listitem"><p><span class="emphasis"><em> Use implementation-specific properties of anonymous
|
the <span class="emphasis"><em>correctness</em></span> criteria.</p></li><li class="listitem"><p><span class="emphasis"><em> Use implementation-specific properties of anonymous
|
||||||
namespaces. </em></span>
|
namespaces. </em></span>
|
||||||
See <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00004.html" target="_top"> this post
|
See <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00004.html"> this post
|
||||||
</a>
|
</a>
|
||||||
This method fails the <span class="emphasis"><em>correctness</em></span> criteria.</p></li><li class="listitem"><p><span class="emphasis"><em>Extension: allow reopening on namespaces</em></span>: This would
|
This method fails the <span class="emphasis"><em>correctness</em></span> criteria.</p></li><li class="listitem"><p><span class="emphasis"><em>Extension: allow reopening on namespaces</em></span>: This would
|
||||||
allow the debug mode to effectively alias the
|
allow the debug mode to effectively alias the
|
||||||
|
|
@ -376,7 +376,7 @@ test02()
|
||||||
functions taking no arguments in mixed-mode settings resulting in
|
functions taking no arguments in mixed-mode settings resulting in
|
||||||
equivalent link names, <code class="code"> vector::push_back() </code> being
|
equivalent link names, <code class="code"> vector::push_back() </code> being
|
||||||
one example.
|
one example.
|
||||||
See <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00177.html" target="_top">link
|
See <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00177.html">link
|
||||||
name</a> </p></li></ul></div><p>Other options may exist for implementing the debug mode, many of
|
name</a> </p></li></ul></div><p>Other options may exist for implementing the debug mode, many of
|
||||||
which have probably been considered and others that may still be
|
which have probably been considered and others that may still be
|
||||||
lurking. This list may be expanded over time to include other
|
lurking. This list may be expanded over time to include other
|
||||||
|
|
@ -388,17 +388,17 @@ test02()
|
||||||
that breaks user specialization), and additional testcases will be
|
that breaks user specialization), and additional testcases will be
|
||||||
added as we are able to identify other typical problem cases. These
|
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
|
test cases will serve as a benchmark by which we can compare debug
|
||||||
mode implementations.</p></div></div></div><div class="sect2" title="Other Implementations"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.other"></a>Other Implementations</h3></div></div></div><p>
|
mode implementations.</p></div></div></div><div class="section" title="Other Implementations"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.other"/>Other Implementations</h3></div></div></div><p>
|
||||||
</p><p> There are several existing implementations of debug modes for C++
|
</p><p> There are several existing implementations of debug modes for C++
|
||||||
standard library implementations, although none of them directly
|
standard library implementations, although none of them directly
|
||||||
supports debugging for programs using libstdc++. The existing
|
supports debugging for programs using libstdc++. The existing
|
||||||
implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="ulink" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
|
implementations include:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html">SafeSTL</a>:
|
||||||
SafeSTL was the original debugging version of the Standard Template
|
SafeSTL was the original debugging version of the Standard Template
|
||||||
Library (STL), implemented by Cay S. Horstmann on top of the
|
Library (STL), implemented by Cay S. Horstmann on top of the
|
||||||
Hewlett-Packard STL. Though it inspired much work in this area, it
|
Hewlett-Packard STL. Though it inspired much work in this area, it
|
||||||
has not been kept up-to-date for use with modern compilers or C++
|
has not been kept up-to-date for use with modern compilers or C++
|
||||||
standard library implementations.</p></li><li class="listitem"><p><a class="ulink" href="http://www.stlport.org/" target="_top">STLport</a>: STLport is a free
|
standard library implementations.</p></li><li class="listitem"><p><a class="link" href="http://www.stlport.org/">STLport</a>: STLport is a free
|
||||||
implementation of the C++ standard library derived from the <a class="ulink" href="http://www.sgi.com/tech/stl/" target="_top">SGI implementation</a>, and
|
implementation of the C++ standard library derived from the <a class="link" href="http://www.sgi.com/tech/stl/">SGI implementation</a>, and
|
||||||
ported to many other platforms. It includes a debug mode that uses a
|
ported to many other platforms. It includes a debug mode that uses a
|
||||||
wrapper model (that in some ways inspired the libstdc++ debug mode
|
wrapper model (that in some ways inspired the libstdc++ debug mode
|
||||||
design), although at the time of this writing the debug mode is
|
design), although at the time of this writing the debug mode is
|
||||||
|
|
@ -409,4 +409,4 @@ test02()
|
||||||
a full debug-mode implementation (including debugging for
|
a full debug-mode implementation (including debugging for
|
||||||
CodeWarrior extensions) and is easy to use, although it meets only
|
CodeWarrior extensions) and is easy to use, although it meets only
|
||||||
the "Full recompilation" (1) recompilation
|
the "Full recompilation" (1) recompilation
|
||||||
guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
|
guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr><tr><td align="left" valign="top">Using </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , parallel " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="bk01pt03ch18s03.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Semantics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , parallel "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="next" href="bk01pt03ch18s03.html" title="Using"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="Semantics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.semantics"/>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
|
||||||
i.e. user-defined functors must not throw exceptions.
|
i.e. user-defined functors must not throw exceptions.
|
||||||
Also, the order of execution is not guaranteed for some functions, of course.
|
Also, the order of execution is not guaranteed for some functions, of course.
|
||||||
Therefore, user-defined functors should not have any concurrent side effects.
|
Therefore, user-defined functors should not have any concurrent side effects.
|
||||||
|
|
@ -8,4 +8,4 @@ Therefore, user-defined functors should not have any concurrent side effects.
|
||||||
OpenMP parallel regions in concurrent threads,
|
OpenMP parallel regions in concurrent threads,
|
||||||
it is not possible to call parallel STL algorithm in
|
it is not possible to call parallel STL algorithm in
|
||||||
concurrent threads, either.
|
concurrent threads, either.
|
||||||
It might work with other compilers, though.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 18. Parallel Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
|
It might work with other compilers, though.</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><td align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 18. Parallel Mode </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Using</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , parallel " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="bk01pt03ch18s03.html" title="Using" /><link rel="next" href="bk01pt03ch18s05.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , parallel "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="prev" href="bk01pt03ch18s03.html" title="Using"/><link rel="next" href="bk01pt03ch18s05.html" title="Testing"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr></table><hr/></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.design"/>Design</h2></div></div></div><p>
|
||||||
</p><div class="sect2" title="Interface Basics"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
|
</p><div class="section" title="Interface Basics"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"/>Interface Basics</h3></div></div></div><p>
|
||||||
All parallel algorithms are intended to have signatures that are
|
All parallel algorithms are intended to have signatures that are
|
||||||
equivalent to the ISO C++ algorithms replaced. For instance, the
|
equivalent to the ISO C++ algorithms replaced. For instance, the
|
||||||
<code class="function">std::adjacent_find</code> function is declared as:
|
<code class="function">std::adjacent_find</code> function is declared as:
|
||||||
|
|
@ -36,13 +36,13 @@ function, if no parallel functions are deemed worthy), based on either
|
||||||
compile-time or run-time conditions.
|
compile-time or run-time conditions.
|
||||||
</p><p> The available signature options are specific for the different
|
</p><p> The available signature options are specific for the different
|
||||||
algorithms/algorithm classes.</p><p> The general view of overloads for the parallel algorithms look like this:
|
algorithms/algorithm classes.</p><p> The general view of overloads for the parallel algorithms look like this:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ISO C++ signature</p></li><li class="listitem"><p>ISO C++ signature + sequential_tag argument</p></li><li class="listitem"><p>ISO C++ signature + algorithm-specific tag type
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>ISO C++ signature</p></li><li class="listitem"><p>ISO C++ signature + sequential_tag argument</p></li><li class="listitem"><p>ISO C++ signature + algorithm-specific tag type
|
||||||
(several signatures)</p></li></ul></div><p> Please note that the implementation may use additional functions
|
(several signatures)</p></li></ul></div><p> Please note that the implementation may use additional functions
|
||||||
(designated with the <code class="code">_switch</code> suffix) to dispatch from the
|
(designated with the <code class="code">_switch</code> suffix) to dispatch from the
|
||||||
ISO C++ signature to the correct parallel version. Also, some of the
|
ISO C++ signature to the correct parallel version. Also, some of the
|
||||||
algorithms do not have support for run-time conditions, so the last
|
algorithms do not have support for run-time conditions, so the last
|
||||||
overload is therefore missing.
|
overload is therefore missing.
|
||||||
</p></div><div class="sect2" title="Configuration and Tuning"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.tuning"></a>Configuration and Tuning</h3></div></div></div><div class="sect3" title="Setting up the OpenMP Environment"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.omp"></a>Setting up the OpenMP Environment</h4></div></div></div><p>
|
</p></div><div class="section" title="Configuration and Tuning"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.tuning"/>Configuration and Tuning</h3></div></div></div><div class="section" title="Setting up the OpenMP Environment"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.omp"/>Setting up the OpenMP Environment</h4></div></div></div><p>
|
||||||
Several aspects of the overall runtime environment can be manipulated
|
Several aspects of the overall runtime environment can be manipulated
|
||||||
by standard OpenMP function calls.
|
by standard OpenMP function calls.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -72,7 +72,7 @@ Other parts of the runtime environment able to be manipulated include
|
||||||
nested parallelism (<code class="function">omp_set_nested</code>), schedule kind
|
nested parallelism (<code class="function">omp_set_nested</code>), schedule kind
|
||||||
(<code class="function">omp_set_schedule</code>), and others. See the OpenMP
|
(<code class="function">omp_set_schedule</code>), and others. See the OpenMP
|
||||||
documentation for more information.
|
documentation for more information.
|
||||||
</p></div><div class="sect3" title="Compile Time Switches"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.compile"></a>Compile Time Switches</h4></div></div></div><p>
|
</p></div><div class="section" title="Compile Time Switches"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.compile"/>Compile Time Switches</h4></div></div></div><p>
|
||||||
To force an algorithm to execute sequentially, even though parallelism
|
To force an algorithm to execute sequentially, even though parallelism
|
||||||
is switched on in general via the macro <code class="constant">_GLIBCXX_PARALLEL</code>,
|
is switched on in general via the macro <code class="constant">_GLIBCXX_PARALLEL</code>,
|
||||||
add <code class="classname">__gnu_parallel::sequential_tag()</code> to the end
|
add <code class="classname">__gnu_parallel::sequential_tag()</code> to the end
|
||||||
|
|
@ -126,7 +126,7 @@ several additional choices, namely
|
||||||
<code class="code">__gnu_parallel::balanced_quicksort_tag</code>.
|
<code class="code">__gnu_parallel::balanced_quicksort_tag</code>.
|
||||||
Multiway mergesort comes with the two splitting strategies for multi-way
|
Multiway mergesort comes with the two splitting strategies for multi-way
|
||||||
merging. The quicksort options cannot be used for <code class="code">stable_sort</code>.
|
merging. The quicksort options cannot be used for <code class="code">stable_sort</code>.
|
||||||
</p></div><div class="sect3" title="Run Time Settings and Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.settings"></a>Run Time Settings and Defaults</h4></div></div></div><p>
|
</p></div><div class="section" title="Run Time Settings and Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.settings"/>Run Time Settings and Defaults</h4></div></div></div><p>
|
||||||
The default parallelization strategy, the choice of specific algorithm
|
The default parallelization strategy, the choice of specific algorithm
|
||||||
strategy, the minimum threshold limits for individual parallel
|
strategy, the minimum threshold limits for individual parallel
|
||||||
algorithms, and aspects of the underlying hardware can be specified as
|
algorithms, and aspects of the underlying hardware can be specified as
|
||||||
|
|
@ -175,7 +175,7 @@ i. e. it is a singleton. It can be read and written by calling
|
||||||
<code class="code">__gnu_parallel::_Settings::set</code>, respectively.
|
<code class="code">__gnu_parallel::_Settings::set</code>, respectively.
|
||||||
Please note that the first call return a const object, so direct manipulation
|
Please note that the first call return a const object, so direct manipulation
|
||||||
is forbidden.
|
is forbidden.
|
||||||
See <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01005.html" target="_top">
|
See <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01005.html">
|
||||||
<code class="filename">settings.h</code></a>
|
<code class="filename">settings.h</code></a>
|
||||||
for complete details.
|
for complete details.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -194,7 +194,7 @@ int main()
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
</pre></div></div><div class="sect2" title="Implementation Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.impl"></a>Implementation Namespaces</h3></div></div></div><p> One namespace contain versions of code that are always
|
</pre></div></div><div class="section" title="Implementation Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.impl"/>Implementation Namespaces</h3></div></div></div><p> One namespace contain versions of code that are always
|
||||||
explicitly sequential:
|
explicitly sequential:
|
||||||
<code class="code">__gnu_serial</code>.
|
<code class="code">__gnu_serial</code>.
|
||||||
</p><p> Two namespaces contain the parallel mode:
|
</p><p> Two namespaces contain the parallel mode:
|
||||||
|
|
@ -210,4 +210,4 @@ __gnu_parallel</code>.
|
||||||
</p><p> More information, and an organized index of types and functions
|
</p><p> More information, and an organized index of types and functions
|
||||||
related to the parallel mode on a per-namespace basis, can be found in
|
related to the parallel mode on a per-namespace basis, can be found in
|
||||||
the generated source documentation.
|
the generated source documentation.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr><tr><td align="left" valign="top">Using </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Testing</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , parallel " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="bk01pt03ch18s04.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , parallel "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode"/><link rel="prev" href="bk01pt03ch18s04.html" title="Design"/><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr/></div><div class="section" title="Testing"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.test"/>Testing</h2></div></div></div><p>
|
||||||
Both the normal conformance and regression tests and the
|
Both the normal conformance and regression tests and the
|
||||||
supplemental performance tests work.
|
supplemental performance tests work.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -23,4 +23,4 @@
|
||||||
additional software dependencies than the usual bare-boned text
|
additional software dependencies than the usual bare-boned text
|
||||||
file, and can be generated by using the <code class="code">make
|
file, and can be generated by using the <code class="code">make
|
||||||
doc-performance</code> rule in the testsuite's Makefile.
|
doc-performance</code> rule in the testsuite's Makefile.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><td align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr><tr><td align="left" valign="top">Design </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , profile " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , profile "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="next" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.design"/>Design</h2></div></div></div><p>
|
||||||
</p><div class="table"><a id="id442414"></a><p class="title"><b>Table 19.1. Profile Code Location</b></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are
|
</p><div class="table"><a id="id489529"/><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">Code Location</th><th style="text-align: left">Use</th></tr></thead><tbody><tr><td style="text-align: left"><code class="code">libstdc++-v3/include/std/*</code></td><td style="text-align: left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td style="text-align: left"><code class="code">libstdc++-v3/include/profile/*</code></td><td style="text-align: left">Profile extension public headers (map, vector, ...).</td></tr><tr><td style="text-align: left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td style="text-align: left">Profile extension internals. Implementation files are
|
||||||
only included from <code class="code">impl/profiler.h</code>, which is the only
|
only included from <code class="code">impl/profiler.h</code>, which is the only
|
||||||
file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
|
file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break"/><p>
|
||||||
</p><div class="sect2" title="Wrapper Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
|
</p><div class="section" title="Wrapper Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"/>Wrapper Model</h3></div></div></div><p>
|
||||||
In order to get our instrumented library version included instead of the
|
In order to get our instrumented library version included instead of the
|
||||||
release one,
|
release one,
|
||||||
we use the same wrapper model as the debug mode.
|
we use the same wrapper model as the debug mode.
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
Currently, mixing the profile mode with debug and parallel extensions is
|
Currently, mixing the profile mode with debug and parallel extensions is
|
||||||
not allowed. Mixing them at compile time will result in preprocessor errors.
|
not allowed. Mixing them at compile time will result in preprocessor errors.
|
||||||
Mixing them at link time is undefined.
|
Mixing them at link time is undefined.
|
||||||
</p></div><div class="sect2" title="Instrumentation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.instrumentation"></a>Instrumentation</h3></div></div></div><p>
|
</p></div><div class="section" title="Instrumentation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.instrumentation"/>Instrumentation</h3></div></div></div><p>
|
||||||
Instead of instrumenting every public entry and exit point,
|
Instead of instrumenting every public entry and exit point,
|
||||||
we chose to add instrumentation on demand, as needed
|
we chose to add instrumentation on demand, as needed
|
||||||
by individual diagnostics.
|
by individual diagnostics.
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
All the instrumentation on/off compile time switches live in
|
All the instrumentation on/off compile time switches live in
|
||||||
<code class="code">include/profile/profiler.h</code>.
|
<code class="code">include/profile/profiler.h</code>.
|
||||||
</p></div><div class="sect2" title="Run Time Behavior"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"></a>Run Time Behavior</h3></div></div></div><p>
|
</p></div><div class="section" title="Run Time Behavior"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"/>Run Time Behavior</h3></div></div></div><p>
|
||||||
For practical reasons, the instrumentation library processes the trace
|
For practical reasons, the instrumentation library processes the trace
|
||||||
partially
|
partially
|
||||||
rather than dumping it to disk in raw form. Each event is processed when
|
rather than dumping it to disk in raw form. Each event is processed when
|
||||||
|
|
@ -61,20 +61,20 @@
|
||||||
call stack of its constructor location.
|
call stack of its constructor location.
|
||||||
</p><p>
|
</p><p>
|
||||||
For details, see
|
For details, see
|
||||||
<a class="ulink" href="http://dx.doi.org/10.1109/CGO.2009.36" target="_top">paper presented at
|
<a class="link" href="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
|
||||||
CGO 2009</a>.
|
CGO 2009</a>.
|
||||||
</p></div><div class="sect2" title="Analysis and Diagnostics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"></a>Analysis and Diagnostics</h3></div></div></div><p>
|
</p></div><div class="section" title="Analysis and Diagnostics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"/>Analysis and Diagnostics</h3></div></div></div><p>
|
||||||
Final analysis takes place offline, and it is based entirely on the
|
Final analysis takes place offline, and it is based entirely on the
|
||||||
generated trace and debugging info in the application binary.
|
generated trace and debugging info in the application binary.
|
||||||
See section Diagnostics for a list of analysis types that we plan to support.
|
See section Diagnostics for a list of analysis types that we plan to support.
|
||||||
</p><p>
|
</p><p>
|
||||||
The input to the analysis is a table indexed by profile type and call stack.
|
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.
|
The data type for each entry depends on the profile type.
|
||||||
</p></div><div class="sect2" title="Cost Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"></a>Cost Model</h3></div></div></div><p>
|
</p></div><div class="section" title="Cost Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"/>Cost Model</h3></div></div></div><p>
|
||||||
While it is likely that cost models become complex as we get into
|
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
|
more sophisticated analysis, we will try to follow a simple set of rules
|
||||||
at the beginning.
|
at the beginning.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
|
||||||
The idea is to estimate or measure the cost of all operations
|
The idea is to estimate or measure the cost of all operations
|
||||||
in the original scenario versus the scenario we advise to switch to.
|
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
|
For instance, when advising to change a vector to a list, an occurrence
|
||||||
|
|
@ -98,7 +98,7 @@
|
||||||
For instance, when considering switching from <code class="code">set</code> to
|
For instance, when considering switching from <code class="code">set</code> to
|
||||||
<code class="code">unordered_set</code>, if we detect use of operator <code class="code">++</code>,
|
<code class="code">unordered_set</code>, if we detect use of operator <code class="code">++</code>,
|
||||||
we will simply not issue the advice, since this could signal that the use
|
we will simply not issue the advice, since this could signal that the use
|
||||||
care require a sorted container.</p></li></ul></div></div><div class="sect2" title="Reports"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"></a>Reports</h3></div></div></div><p>
|
care require a sorted container.</p></li></ul></div></div><div class="section" title="Reports"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"/>Reports</h3></div></div></div><p>
|
||||||
There are two types of reports. First, if we recognize a pattern for which
|
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
|
we have a substitute that is likely to give better performance, we print
|
||||||
the advice and estimated performance gain. The advice is usually associated
|
the advice and estimated performance gain. The advice is usually associated
|
||||||
|
|
@ -110,7 +110,7 @@ the top 10 <code class="code">multimap</code> locations
|
||||||
which have the worst data locality in actual traversals.
|
which have the worst data locality in actual traversals.
|
||||||
Although this does not offer a solution,
|
Although this does not offer a solution,
|
||||||
it helps the user focus on the key problems and ignore the uninteresting ones.
|
it helps the user focus on the key problems and ignore the uninteresting ones.
|
||||||
</p></div><div class="sect2" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.testing"></a>Testing</h3></div></div></div><p>
|
</p></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.testing"/>Testing</h3></div></div></div><p>
|
||||||
First, we want to make sure we preserve the behavior of the release mode.
|
First, we want to make sure we preserve the behavior of the release mode.
|
||||||
You can just type <code class="code">"make check-profile"</code>, which
|
You can just type <code class="code">"make check-profile"</code>, which
|
||||||
builds and runs the whole test suite in profile mode.
|
builds and runs the whole test suite in profile mode.
|
||||||
|
|
@ -119,4 +119,4 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
|
||||||
We created a <code class="code">profile</code> directory in the test suite.
|
We created a <code class="code">profile</code> directory in the test suite.
|
||||||
Each diagnostic must come with at least two tests, one for false positives
|
Each diagnostic must come with at least two tests, one for false positives
|
||||||
and one for false negatives.
|
and one for false negatives.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. Profile Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 19. Profile Mode </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , profile " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s02.html" title="Design" /><link rel="next" href="bk01pt03ch19s04.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Extensions for Custom Containers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , profile "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s02.html" title="Design"/><link rel="next" href="bk01pt03ch19s04.html" title="Empirical Cost Model"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr></table><hr/></div><div class="section" title="Extensions for Custom Containers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.api"/>Extensions for Custom Containers</h2></div></div></div><p>
|
||||||
Many large projects use their own data structures instead of the ones in the
|
Many large projects use their own data structures instead of the ones in the
|
||||||
standard library. If these data structures are similar in functionality
|
standard library. If these data structures are similar in functionality
|
||||||
to the standard library, they can be instrumented with the same hooks
|
to the standard library, they can be instrumented with the same hooks
|
||||||
that are used to instrument the standard library.
|
that are used to instrument the standard library.
|
||||||
The instrumentation API is exposed in file
|
The instrumentation API is exposed in file
|
||||||
<code class="code">profiler.h</code> (look for "Instrumentation hooks").
|
<code class="code">profiler.h</code> (look for "Instrumentation hooks").
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td align="left" valign="top">Design </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , profile " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /><link rel="next" href="bk01pt03ch19s05.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Empirical Cost Model"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , profile "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers"/><link rel="next" href="bk01pt03ch19s05.html" title="Implementation Issues"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr></table><hr/></div><div class="section" title="Empirical Cost Model"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.cost_model"/>Empirical Cost Model</h2></div></div></div><p>
|
||||||
Currently, the cost model uses formulas with predefined relative weights
|
Currently, the cost model uses formulas with predefined relative weights
|
||||||
for alternative containers or container implementations. For instance,
|
for alternative containers or container implementations. For instance,
|
||||||
iterating through a vector is X times faster than iterating through a list.
|
iterating through a vector is X times faster than iterating through a list.
|
||||||
|
|
@ -15,4 +15,4 @@
|
||||||
filled in either by hand or by an automated training mechanism.
|
filled in either by hand or by an automated training mechanism.
|
||||||
The analysis module will then use this database instead of the built in.
|
The analysis module will then use this database instead of the built in.
|
||||||
generic parameters.
|
generic parameters.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Extensions for Custom Containers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td align="left" valign="top">Extensions for Custom Containers </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , profile " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s04.html" title="Empirical Cost Model" /><link rel="next" href="bk01pt03ch19s06.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Implementation Issues"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="sect2" title="Stack Traces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , profile "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s04.html" title="Empirical Cost Model"/><link rel="next" href="bk01pt03ch19s06.html" title="Developer Information"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr></table><hr/></div><div class="section" title="Implementation Issues"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.implementation"/>Implementation Issues</h2></div></div></div><div class="section" title="Stack Traces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"/>Stack Traces</h3></div></div></div><p>
|
||||||
Accurate stack traces are needed during profiling since we group events by
|
Accurate stack traces are needed during profiling since we group events by
|
||||||
call context and dynamic instance. Without accurate traces, diagnostics
|
call context and dynamic instance. Without accurate traces, diagnostics
|
||||||
may be hard to interpret. For instance, when giving advice to the user
|
may be hard to interpret. For instance, when giving advice to the user
|
||||||
|
|
@ -11,24 +11,24 @@
|
||||||
<code class="code">_GLIBCXX_PROFILE_STACK_DEPTH</code> can be set
|
<code class="code">_GLIBCXX_PROFILE_STACK_DEPTH</code> can be set
|
||||||
to 0 if you are willing to give up call context information, or to a small
|
to 0 if you are willing to give up call context information, or to a small
|
||||||
positive value to reduce run time overhead.
|
positive value to reduce run time overhead.
|
||||||
</p></div><div class="sect2" title="Symbolization of Instruction Addresses"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.symbols"></a>Symbolization of Instruction Addresses</h3></div></div></div><p>
|
</p></div><div class="section" title="Symbolization of Instruction Addresses"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.symbols"/>Symbolization of Instruction Addresses</h3></div></div></div><p>
|
||||||
The profiling and analysis phases use only instruction addresses.
|
The profiling and analysis phases use only instruction addresses.
|
||||||
An external utility such as addr2line is needed to postprocess the result.
|
An external utility such as addr2line is needed to postprocess the result.
|
||||||
We do not plan to add symbolization support in the profile extension.
|
We do not plan to add symbolization support in the profile extension.
|
||||||
This would require access to symbol tables, debug information tables,
|
This would require access to symbol tables, debug information tables,
|
||||||
external programs or libraries and other system dependent information.
|
external programs or libraries and other system dependent information.
|
||||||
</p></div><div class="sect2" title="Concurrency"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.concurrency"></a>Concurrency</h3></div></div></div><p>
|
</p></div><div class="section" title="Concurrency"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.concurrency"/>Concurrency</h3></div></div></div><p>
|
||||||
Our current model is simplistic, but precise.
|
Our current model is simplistic, but precise.
|
||||||
We cannot afford to approximate because some of our diagnostics require
|
We cannot afford to approximate because some of our diagnostics require
|
||||||
precise matching of operations to container instance and call context.
|
precise matching of operations to container instance and call context.
|
||||||
During profiling, we keep a single information table per diagnostic.
|
During profiling, we keep a single information table per diagnostic.
|
||||||
There is a single lock per information table.
|
There is a single lock per information table.
|
||||||
</p></div><div class="sect2" title="Using the Standard Library in the Instrumentation Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"></a>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
|
</p></div><div class="section" title="Using the Standard Library in the Instrumentation Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"/>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
|
||||||
As much as we would like to avoid uses of libstdc++ within our
|
As much as we would like to avoid uses of libstdc++ within our
|
||||||
instrumentation library, containers such as unordered_map are very
|
instrumentation library, containers such as unordered_map are very
|
||||||
appealing. We plan to use them as long as they are named properly
|
appealing. We plan to use them as long as they are named properly
|
||||||
to avoid ambiguity.
|
to avoid ambiguity.
|
||||||
</p></div><div class="sect2" title="Malloc Hooks"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"></a>Malloc Hooks</h3></div></div></div><p>
|
</p></div><div class="section" title="Malloc Hooks"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"/>Malloc Hooks</h3></div></div></div><p>
|
||||||
User applications/libraries can provide malloc hooks.
|
User applications/libraries can provide malloc hooks.
|
||||||
When the implementation of the malloc hooks uses stdlibc++, there can
|
When the implementation of the malloc hooks uses stdlibc++, there can
|
||||||
be an infinite cycle between the profile mode instrumentation and the
|
be an infinite cycle between the profile mode instrumentation and the
|
||||||
|
|
@ -42,10 +42,10 @@
|
||||||
uses non-recursive locks.
|
uses non-recursive locks.
|
||||||
XXX: A definitive solution to this problem would be for the profile extension
|
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++.
|
to use a custom allocator internally, and perhaps not to use libstdc++.
|
||||||
</p></div><div class="sect2" title="Construction and Destruction of Global Objects"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.construction-destruction"></a>Construction and Destruction of Global Objects</h3></div></div></div><p>
|
</p></div><div class="section" title="Construction and Destruction of Global Objects"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.construction-destruction"/>Construction and Destruction of Global Objects</h3></div></div></div><p>
|
||||||
The profiling library state is initialized at the first call to a profiling
|
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.
|
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
|
However, we cannot do the same at destruction time. The trace is written
|
||||||
by a function registered by <code class="code">atexit</code>, thus invoked by
|
by a function registered by <code class="code">atexit</code>, thus invoked by
|
||||||
<code class="code">exit</code>.
|
<code class="code">exit</code>.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Empirical Cost Model </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td align="left" valign="top">Empirical Cost Model </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , profile " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s05.html" title="Implementation Issues" /><link rel="next" href="bk01pt03ch19s07.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Developer Information"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="sect2" title="Big Picture"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , profile "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s05.html" title="Implementation Issues"/><link rel="next" href="bk01pt03ch19s07.html" title="Diagnostics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr></table><hr/></div><div class="section" title="Developer Information"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.developer"/>Developer Information</h2></div></div></div><div class="section" title="Big Picture"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"/>Big Picture</h3></div></div></div><p>The profile mode headers are included with
|
||||||
<code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
|
<code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
|
||||||
<code class="code">include/std/*</code>.
|
<code class="code">include/std/*</code>.
|
||||||
</p><p>Instrumented implementations are provided in
|
</p><p>Instrumented implementations are provided in
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
must ensure (1) that the call is guarded against reentrance and
|
must ensure (1) that the call is guarded against reentrance and
|
||||||
(2) that the call can be turned off at compile time using a
|
(2) that the call can be turned off at compile time using a
|
||||||
<code class="code">-D_GLIBCXX_PROFILE_...</code> compiler option.
|
<code class="code">-D_GLIBCXX_PROFILE_...</code> compiler option.
|
||||||
</p></div><div class="sect2" title="How To Add A Diagnostic"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"></a>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
|
</p></div><div class="section" title="How To Add A Diagnostic"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"/>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
|
||||||
</p><p>If you need to instrument a header not already under
|
</p><p>If you need to instrument a header not already under
|
||||||
<code class="code">include/profile/*</code>, first edit the corresponding header
|
<code class="code">include/profile/*</code>, first edit the corresponding header
|
||||||
under <code class="code">include/std/</code> and add a preprocessor directive such
|
under <code class="code">include/std/</code> and add a preprocessor directive such
|
||||||
|
|
@ -42,7 +42,7 @@
|
||||||
All names of methods in namespace <code class="code">__gnu_profile</code> called from
|
All names of methods in namespace <code class="code">__gnu_profile</code> called from
|
||||||
<code class="code">profiler.h</code> must start with <code class="code">__trace_magic_</code>.
|
<code class="code">profiler.h</code> must start with <code class="code">__trace_magic_</code>.
|
||||||
</p><p>Add the implementation of the diagnostic.
|
</p><p>Add the implementation of the diagnostic.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Create new file <code class="code">include/profile/impl/profiler_magic.h</code>.
|
Create new file <code class="code">include/profile/impl/profiler_magic.h</code>.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
Define class <code class="code">__magic_info: public __object_info_base</code>.
|
Define class <code class="code">__magic_info: public __object_info_base</code>.
|
||||||
|
|
@ -65,4 +65,4 @@
|
||||||
<code class="code">include/profile/impl/profiler_trace.h</code>. Use
|
<code class="code">include/profile/impl/profiler_trace.h</code>. Use
|
||||||
<code class="code">__trace_vector_to_list</code> as an example.
|
<code class="code">__trace_vector_to_list</code> as an example.
|
||||||
</p><p>Add documentation in file <code class="code">doc/xml/manual/profile_mode.xml</code>.
|
</p><p>Add documentation in file <code class="code">doc/xml/manual/profile_mode.xml</code>.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation Issues </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td align="left" valign="top">Implementation Issues </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , profile " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s06.html" title="Developer Information" /><link rel="next" href="ext_allocators.html" title="Chapter 20. Allocators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Diagnostics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , profile "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode"/><link rel="prev" href="bk01pt03ch19s06.html" title="Developer Information"/><link rel="next" href="ext_allocators.html" title="Chapter 20. Allocators"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr></table><hr/></div><div class="section" title="Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.diagnostics"/>Diagnostics</h2></div></div></div><p>
|
||||||
The table below presents all the diagnostics we intend to implement.
|
The table below presents all the diagnostics we intend to implement.
|
||||||
Each diagnostic has a corresponding compile time switch
|
Each diagnostic has a corresponding compile time switch
|
||||||
<code class="code">-D_GLIBCXX_PROFILE_<diagnostic></code>.
|
<code class="code">-D_GLIBCXX_PROFILE_<diagnostic></code>.
|
||||||
|
|
@ -18,24 +18,24 @@
|
||||||
A high accuracy means that the diagnostic is unlikely to be wrong.
|
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
|
These grades are not perfect. They are just meant to guide users with
|
||||||
specific needs or time budgets.
|
specific needs or time budgets.
|
||||||
</p><div class="table"><a id="id470044"></a><p class="title"><b>Table 19.2. Profile Diagnostics</b></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.containers" target="_top">
|
</p><div class="table"><a id="id490412"/><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/><col style="text-align: left" class="c3"/><col style="text-align: left" class="c4"/><col style="text-align: left" class="c5"/><col style="text-align: left" class="c6"/><col style="text-align: left" class="c7"/></colgroup><thead><tr><th style="text-align: left">Group</th><th style="text-align: left">Flag</th><th style="text-align: left">Benefit</th><th style="text-align: left">Cost</th><th style="text-align: left">Freq.</th><th style="text-align: left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers" title="Containers">
|
||||||
CONTAINERS</a></td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.hashtable_too_small" target="_top">
|
CONTAINERS</a></td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
|
||||||
HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.hashtable_too_large" target="_top">
|
HASHTABLE_TOO_SMALL</a></td><td style="text-align: left">10</td><td style="text-align: left">1</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
|
||||||
HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.inefficient_hash" target="_top">
|
HASHTABLE_TOO_LARGE</a></td><td style="text-align: left">5</td><td style="text-align: left">1</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
|
||||||
INEFFICIENT_HASH</a></td><td align="left">7</td><td align="left">3</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.vector_too_small" target="_top">
|
INEFFICIENT_HASH</a></td><td style="text-align: left">7</td><td style="text-align: left">3</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small" title="Vector Too Small">
|
||||||
VECTOR_TOO_SMALL</a></td><td align="left">8</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.vector_too_large" target="_top">
|
VECTOR_TOO_SMALL</a></td><td style="text-align: left">8</td><td style="text-align: left">1</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large" title="Vector Too Large">
|
||||||
VECTOR_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.vector_to_hashtable" target="_top">
|
VECTOR_TOO_LARGE</a></td><td style="text-align: left">5</td><td style="text-align: left">1</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable" title="Vector to Hashtable">
|
||||||
VECTOR_TO_HASHTABLE</a></td><td align="left">7</td><td align="left">7</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.hashtable_to_vector" target="_top">
|
VECTOR_TO_HASHTABLE</a></td><td style="text-align: left">7</td><td style="text-align: left">7</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector" title="Hashtable to Vector">
|
||||||
HASHTABLE_TO_VECTOR</a></td><td align="left">7</td><td align="left">7</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.vector_to_list" target="_top">
|
HASHTABLE_TO_VECTOR</a></td><td style="text-align: left">7</td><td style="text-align: left">7</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list" title="Vector to List">
|
||||||
VECTOR_TO_LIST</a></td><td align="left">8</td><td align="left">5</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.list_to_vector" target="_top">
|
VECTOR_TO_LIST</a></td><td style="text-align: left">8</td><td style="text-align: left">5</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">yes</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector" title="List to Vector">
|
||||||
LIST_TO_VECTOR</a></td><td align="left">10</td><td align="left">5</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.assoc_ord_to_unord" target="_top">
|
LIST_TO_VECTOR</a></td><td style="text-align: left">10</td><td style="text-align: left">5</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord" title="Ordered to Unordered Associative Container">
|
||||||
ORDERED_TO_UNORDERED</a></td><td align="left">10</td><td align="left">5</td><td align="left"> </td><td align="left">10</td><td align="left">only map/unordered_map</td></tr><tr><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.algorithms" target="_top">
|
ORDERED_TO_UNORDERED</a></td><td style="text-align: left">10</td><td style="text-align: left">5</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">only map/unordered_map</td></tr><tr><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms" title="Algorithms">
|
||||||
ALGORITHMS</a></td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.algorithms.sort" target="_top">
|
ALGORITHMS</a></td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort" title="Sort Algorithm Performance">
|
||||||
SORT</a></td><td align="left">7</td><td align="left">8</td><td align="left"> </td><td align="left">7</td><td align="left">no</td></tr><tr><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.locality" target="_top">
|
SORT</a></td><td style="text-align: left">7</td><td style="text-align: left">8</td><td style="text-align: left"> </td><td style="text-align: left">7</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality" title="Data Locality">
|
||||||
LOCALITY</a></td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.locality.sw_prefetch" target="_top">
|
LOCALITY</a></td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch" title="Need Software Prefetch">
|
||||||
SOFTWARE_PREFETCH</a></td><td align="left">8</td><td align="left">8</td><td align="left"> </td><td align="left">5</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.locality.linked" target="_top">
|
SOFTWARE_PREFETCH</a></td><td style="text-align: left">8</td><td style="text-align: left">8</td><td style="text-align: left"> </td><td style="text-align: left">5</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked" title="Linked Structure Locality">
|
||||||
RBTREE_LOCALITY</a></td><td align="left">4</td><td align="left">8</td><td align="left"> </td><td align="left">5</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.mthread.false_share" target="_top">
|
RBTREE_LOCALITY</a></td><td style="text-align: left">4</td><td style="text-align: left">8</td><td style="text-align: left"> </td><td style="text-align: left">5</td><td style="text-align: left">no</td></tr><tr><td style="text-align: left"> </td><td style="text-align: left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share" title="False Sharing">
|
||||||
FALSE_SHARING</a></td><td align="left">8</td><td align="left">10</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr></tbody></table></div></div><br class="table-break" /><div class="sect2" title="Diagnostic Template"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.template"></a>Diagnostic Template</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
FALSE_SHARING</a></td><td style="text-align: left">8</td><td style="text-align: left">10</td><td style="text-align: left"> </td><td style="text-align: left">10</td><td style="text-align: left">no</td></tr></tbody></table></div></div><br class="table-break"/><div class="section" title="Diagnostic Template"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.template"/>Diagnostic Template</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_<diagnostic></code>.
|
<code class="code">_GLIBCXX_PROFILE_<diagnostic></code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> What problem will it diagnose?
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> What problem will it diagnose?
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>.
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>.
|
||||||
|
|
@ -52,10 +52,10 @@ program code
|
||||||
...
|
...
|
||||||
advice sample
|
advice sample
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect2" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.containers"></a>Containers</h3></div></div></div><p>
|
</p></li></ul></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.containers"/>Containers</h3></div></div></div><p>
|
||||||
<span class="emphasis"><em>Switch:</em></span>
|
<span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_CONTAINERS</code>.
|
<code class="code">_GLIBCXX_PROFILE_CONTAINERS</code>.
|
||||||
</p><div class="sect3" title="Hashtable Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"></a>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p><div class="section" title="Hashtable Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"/>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL</code>.
|
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with many
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with many
|
||||||
rehash operations, small construction size and large destruction size.
|
rehash operations, small construction size and large destruction size.
|
||||||
|
|
@ -81,7 +81,7 @@ advice sample
|
||||||
|
|
||||||
foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1025530 rehash operations.
|
foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1025530 rehash operations.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Hashtable Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_large"></a>Hashtable Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Hashtable Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_large"/>Hashtable Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE</code>.
|
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables which are
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables which are
|
||||||
never filled up because fewer elements than reserved are ever
|
never filled up because fewer elements than reserved are ever
|
||||||
|
|
@ -110,7 +110,7 @@ foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1
|
||||||
foo.cc:1: advice: Changing initial unordered_set size from 100 to 10 saves N
|
foo.cc:1: advice: Changing initial unordered_set size from 100 to 10 saves N
|
||||||
bytes of memory and M iteration steps.
|
bytes of memory and M iteration steps.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Inefficient Hash"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.inefficient_hash"></a>Inefficient Hash</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Inefficient Hash"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.inefficient_hash"/>Inefficient Hash</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_INEFFICIENT_HASH</code>.
|
<code class="code">_GLIBCXX_PROFILE_INEFFICIENT_HASH</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with polarized
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with polarized
|
||||||
distribution.
|
distribution.
|
||||||
|
|
@ -141,7 +141,7 @@ class dumb_hash {
|
||||||
hs.find(i);
|
hs.find(i);
|
||||||
}
|
}
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Vector Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"></a>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Vector Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"/>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_SMALL</code>.
|
<code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_SMALL</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors with many
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors with many
|
||||||
resize operations, small construction size and large destruction size..
|
resize operations, small construction size and large destruction size..
|
||||||
|
|
@ -166,7 +166,7 @@ class dumb_hash {
|
||||||
foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves
|
foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves
|
||||||
copying 4000000 bytes and 20 memory allocations and deallocations.
|
copying 4000000 bytes and 20 memory allocations and deallocations.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Vector Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"></a>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Vector Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"/>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_LARGE</code>
|
<code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_LARGE</code>
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors which are
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors which are
|
||||||
never filled up because fewer elements than reserved are ever
|
never filled up because fewer elements than reserved are ever
|
||||||
|
|
@ -192,7 +192,7 @@ copying 4000000 bytes and 20 memory allocations and deallocations.
|
||||||
foo.cc:1: advice: Changing initial vector size from 100 to 10 saves N
|
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.
|
bytes of memory and may reduce the number of cache and TLB misses.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Vector to Hashtable"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"></a>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Vector to Hashtable"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"/>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE</code>.
|
<code class="code">_GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
|
||||||
<code class="code">vector</code> that can be substituted with <code class="code">unordered_set</code>
|
<code class="code">vector</code> that can be substituted with <code class="code">unordered_set</code>
|
||||||
|
|
@ -223,7 +223,7 @@ bytes of memory and may reduce the number of cache and TLB misses.
|
||||||
foo.cc:1: advice: Changing "vector" to "unordered_set" will save about 500,000
|
foo.cc:1: advice: Changing "vector" to "unordered_set" will save about 500,000
|
||||||
comparisons.
|
comparisons.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Hashtable to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"></a>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Hashtable to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"/>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR</code>.
|
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
|
||||||
<code class="code">unordered_set</code> that can be substituted with <code class="code">vector</code>
|
<code class="code">unordered_set</code> that can be substituted with <code class="code">vector</code>
|
||||||
|
|
@ -252,7 +252,7 @@ comparisons.
|
||||||
foo.cc:1: advice: Changing "unordered_set" to "vector" will save about N
|
foo.cc:1: advice: Changing "unordered_set" to "vector" will save about N
|
||||||
indirections and may achieve better data locality.
|
indirections and may achieve better data locality.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Vector to List"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"></a>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Vector to List"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"/>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_VECTOR_TO_LIST</code>.
|
<code class="code">_GLIBCXX_PROFILE_VECTOR_TO_LIST</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
|
||||||
<code class="code">vector</code> could be substituted with <code class="code">list</code> for
|
<code class="code">vector</code> could be substituted with <code class="code">list</code> for
|
||||||
|
|
@ -282,7 +282,7 @@ indirections and may achieve better data locality.
|
||||||
foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000
|
foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000
|
||||||
operations.
|
operations.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="List to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"></a>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="List to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"/>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_LIST_TO_VECTOR</code>.
|
<code class="code">_GLIBCXX_PROFILE_LIST_TO_VECTOR</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
|
||||||
<code class="code">list</code> could be substituted with <code class="code">vector</code> for
|
<code class="code">list</code> could be substituted with <code class="code">vector</code> for
|
||||||
|
|
@ -309,7 +309,7 @@ operations.
|
||||||
foo.cc:1: advice: Changing "list" to "vector" will save about 1000000 indirect
|
foo.cc:1: advice: Changing "list" to "vector" will save about 1000000 indirect
|
||||||
memory references.
|
memory references.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="List to Forward List (Slist)"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"></a>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="List to Forward List (Slist)"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"/>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_LIST_TO_SLIST</code>.
|
<code class="code">_GLIBCXX_PROFILE_LIST_TO_SLIST</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
|
||||||
<code class="code">list</code> could be substituted with <code class="code">forward_list</code> for
|
<code class="code">list</code> could be substituted with <code class="code">forward_list</code> for
|
||||||
|
|
@ -339,7 +339,7 @@ memory references.
|
||||||
|
|
||||||
foo.cc:1: advice: Change "list" to "forward_list".
|
foo.cc:1: advice: Change "list" to "forward_list".
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Ordered to Unordered Associative Container"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"></a>Ordered to Unordered Associative Container</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Ordered to Unordered Associative Container"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"/>Ordered to Unordered Associative Container</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_ORDERED_TO_UNORDERED</code>.
|
<code class="code">_GLIBCXX_PROFILE_ORDERED_TO_UNORDERED</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where ordered
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where ordered
|
||||||
associative containers can be replaced with unordered ones.
|
associative containers can be replaced with unordered ones.
|
||||||
|
|
@ -366,18 +366,18 @@ foo.cc:1: advice: Change "list" to "forward_list".
|
||||||
7 sum += *s.find(i);
|
7 sum += *s.find(i);
|
||||||
8 }
|
8 }
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div></div><div class="sect2" title="Algorithms"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.algorithms"></a>Algorithms</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div></div><div class="section" title="Algorithms"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.algorithms"/>Algorithms</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_ALGORITHMS</code>.
|
<code class="code">_GLIBCXX_PROFILE_ALGORITHMS</code>.
|
||||||
</p><div class="sect3" title="Sort Algorithm Performance"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.algorithms.sort"></a>Sort Algorithm Performance</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p><div class="section" title="Sort Algorithm Performance"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.algorithms.sort"/>Sort Algorithm Performance</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_SORT</code>.
|
<code class="code">_GLIBCXX_PROFILE_SORT</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of sort algorithm
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of sort algorithm
|
||||||
performance based on actual input. For instance, advise Radix Sort over
|
performance based on actual input. For instance, advise Radix Sort over
|
||||||
Quick Sort for a particular call context.
|
Quick Sort for a particular call context.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
|
||||||
See papers:
|
See papers:
|
||||||
<a class="ulink" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
|
<a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981">
|
||||||
A framework for adaptive algorithm selection in STAPL</a> and
|
A framework for adaptive algorithm selection in STAPL</a> and
|
||||||
<a class="ulink" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
|
<a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227">
|
||||||
Optimizing Sorting with Machine Learning Algorithms</a>.
|
Optimizing Sorting with Machine Learning Algorithms</a>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>60%.
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>60%.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span> Change sort algorithm
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span> Change sort algorithm
|
||||||
|
|
@ -389,9 +389,9 @@ foo.cc:1: advice: Change "list" to "forward_list".
|
||||||
Runtime(algo) for algo in [radix, quick, merge, ...]</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
|
Runtime(algo) for algo in [radix, quick, merge, ...]</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div></div><div class="sect2" title="Data Locality"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.locality"></a>Data Locality</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div></div><div class="section" title="Data Locality"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.locality"/>Data Locality</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_LOCALITY</code>.
|
<code class="code">_GLIBCXX_PROFILE_LOCALITY</code>.
|
||||||
</p><div class="sect3" title="Need Software Prefetch"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.sw_prefetch"></a>Need Software Prefetch</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p><div class="section" title="Need Software Prefetch"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.sw_prefetch"/>Need Software Prefetch</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_SOFTWARE_PREFETCH</code>.
|
<code class="code">_GLIBCXX_PROFILE_SOFTWARE_PREFETCH</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Discover sequences of indirect
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Discover sequences of indirect
|
||||||
memory accesses that are not regular, thus cannot be predicted by
|
memory accesses that are not regular, thus cannot be predicted by
|
||||||
|
|
@ -434,7 +434,7 @@ foo.cc:1: advice: Change "list" to "forward_list".
|
||||||
|
|
||||||
foo.cc:7: advice: Insert prefetch instruction.
|
foo.cc:7: advice: Insert prefetch instruction.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="Linked Structure Locality"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.linked"></a>Linked Structure Locality</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="Linked Structure Locality"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.linked"/>Linked Structure Locality</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
|
<code class="code">_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of locality of
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of locality of
|
||||||
objects stored in linked structures (lists, red-black trees and hashtables)
|
objects stored in linked structures (lists, red-black trees and hashtables)
|
||||||
|
|
@ -442,7 +442,7 @@ foo.cc:7: advice: Insert prefetch instruction.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>Allocation can be tuned
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>Allocation can be tuned
|
||||||
to a specific traversal pattern, to result in better data locality.
|
to a specific traversal pattern, to result in better data locality.
|
||||||
See paper:
|
See paper:
|
||||||
<a class="ulink" href="http://www.springerlink.com/content/8085744l00x72662/" target="_top">
|
<a class="link" href="http://www.springerlink.com/content/8085744l00x72662/">
|
||||||
Custom Memory Allocation for Free</a>.
|
Custom Memory Allocation for Free</a>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>30%.
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>30%.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
|
||||||
|
|
@ -479,13 +479,13 @@ foo.cc:7: advice: Insert prefetch instruction.
|
||||||
foo.cc:5: advice: High scatter score NNN for set built here. Consider changing
|
foo.cc:5: advice: High scatter score NNN for set built here. Consider changing
|
||||||
the allocation sequence or switching to a structure conscious allocator.
|
the allocation sequence or switching to a structure conscious allocator.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div></div><div class="sect2" title="Multithreaded Data Access"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.mthread"></a>Multithreaded Data Access</h3></div></div></div><p>
|
</p></li></ul></div></div></div><div class="section" title="Multithreaded Data Access"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.mthread"/>Multithreaded Data Access</h3></div></div></div><p>
|
||||||
The diagnostics in this group are not meant to be implemented short term.
|
The diagnostics in this group are not meant to be implemented short term.
|
||||||
They require compiler support to know when container elements are written
|
They require compiler support to know when container elements are written
|
||||||
to. Instrumentation can only tell us when elements are referenced.
|
to. Instrumentation can only tell us when elements are referenced.
|
||||||
</p><p><span class="emphasis"><em>Switch:</em></span>
|
</p><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_MULTITHREADED</code>.
|
<code class="code">_GLIBCXX_PROFILE_MULTITHREADED</code>.
|
||||||
</p><div class="sect3" title="Data Dependence Violations at Container Level"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.ddtest"></a>Data Dependence Violations at Container Level</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p><div class="section" title="Data Dependence Violations at Container Level"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.ddtest"/>Data Dependence Violations at Container Level</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_DDTEST</code>.
|
<code class="code">_GLIBCXX_PROFILE_DDTEST</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect container elements
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect container elements
|
||||||
that are referenced from multiple threads in the parallel region or
|
that are referenced from multiple threads in the parallel region or
|
||||||
|
|
@ -501,7 +501,7 @@ the allocation sequence or switching to a structure conscious allocator.
|
||||||
Keep a shadow for each container. Record iterator dereferences and
|
Keep a shadow for each container. Record iterator dereferences and
|
||||||
container member accesses. Issue advice for elements referenced by
|
container member accesses. Issue advice for elements referenced by
|
||||||
multiple threads.
|
multiple threads.
|
||||||
See paper: <a class="ulink" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
|
See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148">
|
||||||
The LRPD test: speculative run-time parallelization of loops with
|
The LRPD test: speculative run-time parallelization of loops with
|
||||||
privatization and reduction parallelization</a>.
|
privatization and reduction parallelization</a>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
|
||||||
|
|
@ -509,7 +509,7 @@ the allocation sequence or switching to a structure conscious allocator.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div><div class="sect3" title="False Sharing"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"></a>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
</p></li></ul></div></div><div class="section" title="False Sharing"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"/>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_FALSE_SHARING</code>.
|
<code class="code">_GLIBCXX_PROFILE_FALSE_SHARING</code>.
|
||||||
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect elements in the
|
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect elements in the
|
||||||
same container which share a cache line, are written by at least one
|
same container which share a cache line, are written by at least one
|
||||||
|
|
@ -542,7 +542,7 @@ OMP_NUM_THREADS=2 ./a.out
|
||||||
foo.cc:1: advice: Change container structure or padding to avoid false
|
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.
|
sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p></li></ul></div></div></div><div class="sect2" title="Statistics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"></a>Statistics</h3></div></div></div><p>
|
</p></li></ul></div></div></div><div class="section" title="Statistics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"/>Statistics</h3></div></div></div><p>
|
||||||
<span class="emphasis"><em>Switch:</em></span>
|
<span class="emphasis"><em>Switch:</em></span>
|
||||||
<code class="code">_GLIBCXX_PROFILE_STATISTICS</code>.
|
<code class="code">_GLIBCXX_PROFILE_STATISTICS</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -555,4 +555,4 @@ sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
|
||||||
This diagnostic will not issue any advice, but it will print statistics for
|
This diagnostic will not issue any advice, but it will print statistics for
|
||||||
each container construction site. The statistics will contain the cost
|
each container construction site. The statistics will contain the cost
|
||||||
of each operation actually performed on the container.
|
of each operation actually performed on the container.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developer Information </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. Allocators</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr><tr><td align="left" valign="top">Developer Information </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 20. Allocators</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>HP/SGI</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_containers.html" title="Chapter 21. Containers" /><link rel="prev" href="ext_containers.html" title="Chapter 21. Containers" /><link rel="next" href="bk01pt03ch21s03.html" title="Deprecated HP/SGI" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">HP/SGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Containers</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="HP/SGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>HP/SGI</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>HP/SGI</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_containers.html" title="Chapter 21. Containers"/><link rel="prev" href="ext_containers.html" title="Chapter 21. Containers"/><link rel="next" href="bk01pt03ch21s03.html" title="Deprecated HP/SGI"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">HP/SGI</th></tr><tr><td align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Containers</th><td align="right"> <a accesskey="n" href="bk01pt03ch21s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="HP/SGI"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.sgi"/>HP/SGI</h2></div></div></div><p>
|
||||||
</p><p>A few extensions and nods to backwards-compatibility have been made with
|
</p><p>A few extensions and nods to backwards-compatibility have been made with
|
||||||
containers. Those dealing with older SGI-style allocators are dealt with
|
containers. Those dealing with older SGI-style allocators are dealt with
|
||||||
elsewhere. The remaining ones all deal with bits:
|
elsewhere. The remaining ones all deal with bits:
|
||||||
|
|
@ -40,4 +40,4 @@
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
size_t _Find_first() const;
|
size_t _Find_first() const;
|
||||||
size_t _Find_next (size_t prev) const;</pre><p>The same caveat given for the _Unchecked_* functions applies here also.
|
size_t _Find_next (size_t prev) const;</pre><p>The same caveat given for the _Unchecked_* functions applies here also.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. Containers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Deprecated HP/SGI</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch21s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 21. Containers </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Deprecated HP/SGI</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated HP/SGI</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_containers.html" title="Chapter 21. Containers" /><link rel="prev" href="bk01pt03ch21s02.html" title="HP/SGI" /><link rel="next" href="ext_utilities.html" title="Chapter 22. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated HP/SGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Containers</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Deprecated HP/SGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated HP/SGI</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Deprecated HP/SGI</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_containers.html" title="Chapter 21. Containers"/><link rel="prev" href="bk01pt03ch21s02.html" title="HP/SGI"/><link rel="next" href="ext_utilities.html" title="Chapter 22. Utilities"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated HP/SGI</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Containers</th><td align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr/></div><div class="section" title="Deprecated HP/SGI"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.deprecated_sgi"/>Deprecated HP/SGI</h2></div></div></div><p>
|
||||||
The SGI hashing classes <code class="classname">hash_set</code> and
|
The SGI hashing classes <code class="classname">hash_set</code> and
|
||||||
<code class="classname">hash_set</code> have been deprecated by the
|
<code class="classname">hash_set</code> have been deprecated by the
|
||||||
unordered_set, unordered_multiset, unordered_map,
|
unordered_set, unordered_multiset, unordered_map,
|
||||||
|
|
@ -25,12 +25,12 @@
|
||||||
sets.
|
sets.
|
||||||
</p><p>Each of the associative containers map, multimap, set, and multiset
|
</p><p>Each of the associative containers map, multimap, set, and multiset
|
||||||
have a counterpart which uses a
|
have a counterpart which uses a
|
||||||
<a class="ulink" href="http://www.sgi.com/tech/stl/HashFunction.html" target="_top">hashing
|
<a class="link" href="http://www.sgi.com/tech/stl/HashFunction.html">hashing
|
||||||
function</a> to do the arranging, instead of a strict weak ordering
|
function</a> to do the arranging, instead of a strict weak ordering
|
||||||
function. The classes take as one of their template parameters a
|
function. The classes take as one of their template parameters a
|
||||||
function object that will return the hash value; by default, an
|
function object that will return the hash value; by default, an
|
||||||
instantiation of
|
instantiation of
|
||||||
<a class="ulink" href="http://www.sgi.com/tech/stl/hash.html" target="_top">hash</a>.
|
<a class="link" href="http://www.sgi.com/tech/stl/hash.html">hash</a>.
|
||||||
You should specialize this functor for your class, or define your own,
|
You should specialize this functor for your class, or define your own,
|
||||||
before trying to use one of the hashing classes.
|
before trying to use one of the hashing classes.
|
||||||
</p><p>The hashing classes support all the usual associative container
|
</p><p>The hashing classes support all the usual associative container
|
||||||
|
|
@ -47,4 +47,4 @@
|
||||||
possibility of pathological cases, you'll probably get better
|
possibility of pathological cases, you'll probably get better
|
||||||
performance from hash_map.
|
performance from hash_map.
|
||||||
</em></span>
|
</em></span>
|
||||||
</p></blockquote></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">HP/SGI </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Utilities</td></tr></table></div></body></html>
|
</p></blockquote></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td align="left" valign="top">HP/SGI </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 22. Utilities</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_concurrency.html" title="Chapter 28. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 28. Concurrency" /><link rel="next" href="bk01pt03ch28s03.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch28s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Implementation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="sect2" title="Using Builtin Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_concurrency.html" title="Chapter 28. Concurrency"/><link rel="prev" href="ext_concurrency.html" title="Chapter 28. Concurrency"/><link rel="next" href="bk01pt03ch28s03.html" title="Use"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Concurrency</th><td align="right"> <a accesskey="n" href="bk01pt03ch28s03.html">Next</a></td></tr></table><hr/></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency.impl"/>Implementation</h2></div></div></div><div class="section" title="Using Builtin Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"/>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
|
||||||
implemented via compiler intrinsics (if the underlying host is
|
implemented via compiler intrinsics (if the underlying host is
|
||||||
capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
|
capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
|
||||||
the compiler builtins for atomics are not universally implemented,
|
the compiler builtins for atomics are not universally implemented,
|
||||||
|
|
@ -18,14 +18,14 @@ If builtins are possible for bool-sized integral types,
|
||||||
If builtins are possible for int-sized integral types,
|
If builtins are possible for int-sized integral types,
|
||||||
<code class="code">_GLIBCXX_ATOMIC_BUILTINS_4</code> will be defined.
|
<code class="code">_GLIBCXX_ATOMIC_BUILTINS_4</code> will be defined.
|
||||||
</p><p>For the following hosts, intrinsics are enabled by default.
|
</p><p>For the following hosts, intrinsics are enabled by default.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>alpha</p></li><li class="listitem"><p>ia64</p></li><li class="listitem"><p>powerpc</p></li><li class="listitem"><p>s390</p></li></ul></div><p>For others, some form of <code class="code">-march</code> may work. On
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>alpha</p></li><li class="listitem"><p>ia64</p></li><li class="listitem"><p>powerpc</p></li><li class="listitem"><p>s390</p></li></ul></div><p>For others, some form of <code class="code">-march</code> may work. On
|
||||||
non-ancient x86 hardware, <code class="code">-march=native</code> usually does the
|
non-ancient x86 hardware, <code class="code">-march=native</code> usually does the
|
||||||
trick.</p><p> For hosts without compiler intrinsics, but with capable
|
trick.</p><p> For hosts without compiler intrinsics, but with capable
|
||||||
hardware, hand-crafted assembly is selected. This is the case for the following hosts:
|
hardware, hand-crafted assembly is selected. This is the case for the following hosts:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
|
||||||
</p><p> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html" target="_top"> documentation</a>.
|
</p><p> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html"> documentation</a>.
|
||||||
</p><p> More details on the library fallbacks from the porting <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">section</a>.
|
</p><p> More details on the library fallbacks from the porting <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">section</a>.
|
||||||
</p></div><div class="sect2" title="Thread Abstraction"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"></a>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
|
</p></div><div class="section" title="Thread Abstraction"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"/>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
|
||||||
the thread interface for GCC. This layer is called "gthread," and is
|
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
|
comprised of one header file that wraps the host's default thread layer with
|
||||||
a POSIX-like interface.
|
a POSIX-like interface.
|
||||||
|
|
@ -33,9 +33,9 @@ a POSIX-like interface.
|
||||||
the current host. In libstdc++ implementation files,
|
the current host. In libstdc++ implementation files,
|
||||||
<bits/gthr.h> is used to select the proper gthreads file.
|
<bits/gthr.h> is used to select the proper gthreads file.
|
||||||
</p><p>Within libstdc++ sources, all calls to underlying thread functionality
|
</p><p>Within libstdc++ sources, all calls to underlying thread functionality
|
||||||
use this layer. More detail as to the specific interface can be found in the source <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00883_source.html" target="_top">documentation</a>.
|
use this layer. More detail as to the specific interface can be found in the source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00883_source.html">documentation</a>.
|
||||||
</p><p>By design, the gthread layer is interoperable with the types,
|
</p><p>By design, the gthread layer is interoperable with the types,
|
||||||
functions, and usage found in the usual <pthread.h> file,
|
functions, and usage found in the usual <pthread.h> file,
|
||||||
including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
|
including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
|
||||||
etc.
|
etc.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch28s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch28s03.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 28. Concurrency </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Use</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_concurrency.html" title="Chapter 28. Concurrency" /><link rel="prev" href="bk01pt03ch28s02.html" title="Implementation" /><link rel="next" href="bk01pt04.html" title="Part IV. Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch28s02.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Use"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="ext_concurrency.html" title="Chapter 28. Concurrency"/><link rel="prev" href="bk01pt03ch28s02.html" title="Implementation"/><link rel="next" href="bk01pt04.html" title="Part IV. Appendices"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch28s02.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Concurrency</th><td align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr></table><hr/></div><div class="section" title="Use"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency.use"/>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
#include <ext/concurrence.h>
|
#include <ext/concurrence.h>
|
||||||
|
|
||||||
|
|
@ -31,6 +31,6 @@ the mutex as control moves out of this block.
|
||||||
concurrence-related errors. These classes
|
concurrence-related errors. These classes
|
||||||
are: <code class="code">__concurrence_lock_error</code>, <code class="code">__concurrence_unlock_error</code>, <code class="code">__concurrence_wait_error</code>,
|
are: <code class="code">__concurrence_lock_error</code>, <code class="code">__concurrence_unlock_error</code>, <code class="code">__concurrence_wait_error</code>,
|
||||||
and <code class="code">__concurrence_broadcast_error</code>.
|
and <code class="code">__concurrence_broadcast_error</code>.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch28s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV.
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch28s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr><tr><td align="left" valign="top">Implementation </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Part IV.
|
||||||
Appendices
|
Appendices
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="extensions.html" title="Part III. Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title/><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="extensions.html" title="Part III. Extensions"/><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"/></tr><tr><td align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a id="id410049"></a></h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr/></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="id484912"/></h1></div></div></div><p>
|
||||||
Here we will make an attempt at describing the non-Standard extensions to
|
Here we will make an attempt at describing the non-Standard extensions to
|
||||||
the library. Some of these are from SGI's STL, some of these are GNU's,
|
the library. Some of these are from SGI's STL, some of these are GNU's,
|
||||||
and some just seemed to appear on the doorstep.
|
and some just seemed to appear on the doorstep.
|
||||||
</p><p><span class="emphasis"><em>Before</em></span> you leap in and use any of these
|
</p><p><span class="emphasis"><em>Before</em></span> you leap in and use any of these
|
||||||
extensions, be aware of two things:
|
extensions, be aware of two things:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
Non-Standard means exactly that.
|
Non-Standard means exactly that.
|
||||||
</p><p>
|
</p><p>
|
||||||
The behavior, and the very
|
The behavior, and the very
|
||||||
|
|
@ -20,7 +20,7 @@ extensions, be aware of two things:
|
||||||
treat them differently, or...
|
treat them differently, or...
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
You should know how to access these headers properly.
|
You should know how to access these headers properly.
|
||||||
</p></li></ol></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III.
|
</p></li></ol></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr><tr><td align="left" valign="top">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="Chapter 2. Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Bugs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="sect2" title="Implementation Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="status.html" title="Chapter 1. Status"/><link rel="prev" href="license.html" title="License"/><link rel="next" href="setup.html" title="Chapter 2. Setup"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr/></div><div class="section" title="Bugs"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status.bugs"/>Bugs</h2></div></div></div><div class="section" title="Implementation Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"/>Implementation Bugs</h3></div></div></div><p>
|
||||||
Information on known bugs, details on efforts to fix them, and
|
Information on known bugs, details on efforts to fix them, and
|
||||||
fixed bugs are all available as part of the <a class="ulink" href="http://gcc.gnu.org/bugs/" target="_top">GCC bug tracking system</a>,
|
fixed bugs are all available as part of the <a class="link" href="http://gcc.gnu.org/bugs/">GCC bug tracking system</a>,
|
||||||
with the category set to <code class="literal">libstdc++</code>.
|
with the category set to <code class="literal">libstdc++</code>.
|
||||||
</p></div><div class="sect2" title="Standard Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.iso"></a>Standard Bugs</h3></div></div></div><p>
|
</p></div><div class="section" title="Standard Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.iso"/>Standard Bugs</h3></div></div></div><p>
|
||||||
Everybody's got issues. Even the C++ Standard Library.
|
Everybody's got issues. Even the C++ Standard Library.
|
||||||
</p><p>
|
</p><p>
|
||||||
The Library Working Group, or LWG, is the ISO subcommittee responsible
|
The Library Working Group, or LWG, is the ISO subcommittee responsible
|
||||||
|
|
@ -15,9 +15,9 @@
|
||||||
Here are the issues which have resulted in code changes to the library.
|
Here are the issues which have resulted in code changes to the library.
|
||||||
The links are to the specific defect reports from a <span class="emphasis"><em>partial
|
The links are to the specific defect reports from a <span class="emphasis"><em>partial
|
||||||
copy</em></span> of the Issues List. You can read the full version online
|
copy</em></span> of the Issues List. You can read the full version online
|
||||||
at the <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/" target="_top">ISO C++
|
at the <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/">ISO C++
|
||||||
Committee homepage</a>, linked to on the
|
Committee homepage</a>, linked to on the
|
||||||
<a class="ulink" href="http://gcc.gnu.org/readings.html" target="_top">GCC "Readings"
|
<a class="link" href="http://gcc.gnu.org/readings.html">GCC "Readings"
|
||||||
page</a>. If
|
page</a>. If
|
||||||
you spend a lot of time reading the issues, we recommend downloading
|
you spend a lot of time reading the issues, we recommend downloading
|
||||||
the ZIP file and reading them locally.
|
the ZIP file and reading them locally.
|
||||||
|
|
@ -34,319 +34,319 @@
|
||||||
and src directories for appearances of
|
and src directories for appearances of
|
||||||
<code class="constant">_GLIBCXX_RESOLVE_LIB_DEFECTS</code> for examples
|
<code class="constant">_GLIBCXX_RESOLVE_LIB_DEFECTS</code> for examples
|
||||||
of style. Note that we usually do not make changes to the
|
of style. Note that we usually do not make changes to the
|
||||||
code until an issue has reached <a class="ulink" href="../ext/lwg-active.html#DR" target="_top">DR</a> status.
|
code until an issue has reached <a class="link" href="../ext/lwg-active.html#DR">DR</a> status.
|
||||||
</p><div class="variablelist"><dl><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#5" target="_top">5</a>:
|
</p><div class="variablelist"><dl><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#5">5</a>:
|
||||||
<span class="emphasis"><em>string::compare specification questionable</em></span>
|
<span class="emphasis"><em>string::compare specification questionable</em></span>
|
||||||
</span></dt><dd><p>This should be two overloaded functions rather than a single function.
|
</span></dt><dd><p>This should be two overloaded functions rather than a single function.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#17" target="_top">17</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#17">17</a>:
|
||||||
<span class="emphasis"><em>Bad bool parsing</em></span>
|
<span class="emphasis"><em>Bad bool parsing</em></span>
|
||||||
</span></dt><dd><p>Apparently extracting Boolean values was messed up...
|
</span></dt><dd><p>Apparently extracting Boolean values was messed up...
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#19" target="_top">19</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#19">19</a>:
|
||||||
<span class="emphasis"><em>"Noconv" definition too vague</em></span>
|
<span class="emphasis"><em>"Noconv" definition too vague</em></span>
|
||||||
</span></dt><dd><p>If <code class="code">codecvt::do_in</code> returns <code class="code">noconv</code> there are
|
</span></dt><dd><p>If <code class="code">codecvt::do_in</code> returns <code class="code">noconv</code> there are
|
||||||
no changes to the values in <code class="code">[to, to_limit)</code>.
|
no changes to the values in <code class="code">[to, to_limit)</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#22" target="_top">22</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#22">22</a>:
|
||||||
<span class="emphasis"><em>Member open vs flags</em></span>
|
<span class="emphasis"><em>Member open vs flags</em></span>
|
||||||
</span></dt><dd><p>Re-opening a file stream does <span class="emphasis"><em>not</em></span> clear the state flags.
|
</span></dt><dd><p>Re-opening a file stream does <span class="emphasis"><em>not</em></span> clear the state flags.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#23" target="_top">23</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#23">23</a>:
|
||||||
<span class="emphasis"><em>Num_get overflow result</em></span>
|
<span class="emphasis"><em>Num_get overflow result</em></span>
|
||||||
</span></dt><dd><p>Implement the proposed resolution.
|
</span></dt><dd><p>Implement the proposed resolution.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#25" target="_top">25</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#25">25</a>:
|
||||||
<span class="emphasis"><em>String operator<< uses width() value wrong</em></span>
|
<span class="emphasis"><em>String operator<< uses width() value wrong</em></span>
|
||||||
</span></dt><dd><p>Padding issues.
|
</span></dt><dd><p>Padding issues.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#48" target="_top">48</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#48">48</a>:
|
||||||
<span class="emphasis"><em>Use of non-existent exception constructor</em></span>
|
<span class="emphasis"><em>Use of non-existent exception constructor</em></span>
|
||||||
</span></dt><dd><p>An instance of <code class="code">ios_base::failure</code> is constructed instead.
|
</span></dt><dd><p>An instance of <code class="code">ios_base::failure</code> is constructed instead.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#49" target="_top">49</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#49">49</a>:
|
||||||
<span class="emphasis"><em>Underspecification of ios_base::sync_with_stdio</em></span>
|
<span class="emphasis"><em>Underspecification of ios_base::sync_with_stdio</em></span>
|
||||||
</span></dt><dd><p>The return type is the <span class="emphasis"><em>previous</em></span> state of synchronization.
|
</span></dt><dd><p>The return type is the <span class="emphasis"><em>previous</em></span> state of synchronization.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#50" target="_top">50</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#50">50</a>:
|
||||||
<span class="emphasis"><em>Copy constructor and assignment operator of ios_base</em></span>
|
<span class="emphasis"><em>Copy constructor and assignment operator of ios_base</em></span>
|
||||||
</span></dt><dd><p>These members functions are declared <code class="code">private</code> and are
|
</span></dt><dd><p>These members functions are declared <code class="code">private</code> and are
|
||||||
thus inaccessible. Specifying the correct semantics of
|
thus inaccessible. Specifying the correct semantics of
|
||||||
"copying stream state" was deemed too complicated.
|
"copying stream state" was deemed too complicated.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#60" target="_top">60</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#60">60</a>:
|
||||||
<span class="emphasis"><em>What is a formatted input function?</em></span>
|
<span class="emphasis"><em>What is a formatted input function?</em></span>
|
||||||
</span></dt><dd><p>This DR made many widespread changes to <code class="code">basic_istream</code>
|
</span></dt><dd><p>This DR made many widespread changes to <code class="code">basic_istream</code>
|
||||||
and <code class="code">basic_ostream</code> all of which have been implemented.
|
and <code class="code">basic_ostream</code> all of which have been implemented.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#63" target="_top">63</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#63">63</a>:
|
||||||
<span class="emphasis"><em>Exception-handling policy for unformatted output</em></span>
|
<span class="emphasis"><em>Exception-handling policy for unformatted output</em></span>
|
||||||
</span></dt><dd><p>Make the policy consistent with that of formatted input, unformatted
|
</span></dt><dd><p>Make the policy consistent with that of formatted input, unformatted
|
||||||
input, and formatted output.
|
input, and formatted output.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#68" target="_top">68</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#68">68</a>:
|
||||||
<span class="emphasis"><em>Extractors for char* should store null at end</em></span>
|
<span class="emphasis"><em>Extractors for char* should store null at end</em></span>
|
||||||
</span></dt><dd><p>And they do now. An editing glitch in the last item in the list of
|
</span></dt><dd><p>And they do now. An editing glitch in the last item in the list of
|
||||||
[27.6.1.2.3]/7.
|
[27.6.1.2.3]/7.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#74" target="_top">74</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#74">74</a>:
|
||||||
<span class="emphasis"><em>Garbled text for codecvt::do_max_length</em></span>
|
<span class="emphasis"><em>Garbled text for codecvt::do_max_length</em></span>
|
||||||
</span></dt><dd><p>The text of the standard was gibberish. Typos gone rampant.
|
</span></dt><dd><p>The text of the standard was gibberish. Typos gone rampant.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#75" target="_top">75</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#75">75</a>:
|
||||||
<span class="emphasis"><em>Contradiction in codecvt::length's argument types</em></span>
|
<span class="emphasis"><em>Contradiction in codecvt::length's argument types</em></span>
|
||||||
</span></dt><dd><p>Change the first parameter to <code class="code">stateT&</code> and implement
|
</span></dt><dd><p>Change the first parameter to <code class="code">stateT&</code> and implement
|
||||||
the new effects paragraph.
|
the new effects paragraph.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#83" target="_top">83</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#83">83</a>:
|
||||||
<span class="emphasis"><em>string::npos vs. string::max_size()</em></span>
|
<span class="emphasis"><em>string::npos vs. string::max_size()</em></span>
|
||||||
</span></dt><dd><p>Safety checks on the size of the string should test against
|
</span></dt><dd><p>Safety checks on the size of the string should test against
|
||||||
<code class="code">max_size()</code> rather than <code class="code">npos</code>.
|
<code class="code">max_size()</code> rather than <code class="code">npos</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#90" target="_top">90</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#90">90</a>:
|
||||||
<span class="emphasis"><em>Incorrect description of operator>> for strings</em></span>
|
<span class="emphasis"><em>Incorrect description of operator>> for strings</em></span>
|
||||||
</span></dt><dd><p>The effect contain <code class="code">isspace(c,getloc())</code> which must be
|
</span></dt><dd><p>The effect contain <code class="code">isspace(c,getloc())</code> which must be
|
||||||
replaced by <code class="code">isspace(c,is.getloc())</code>.
|
replaced by <code class="code">isspace(c,is.getloc())</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#91" target="_top">91</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#91">91</a>:
|
||||||
<span class="emphasis"><em>Description of operator>> and getline() for string<>
|
<span class="emphasis"><em>Description of operator>> and getline() for string<>
|
||||||
might cause endless loop</em></span>
|
might cause endless loop</em></span>
|
||||||
</span></dt><dd><p>They behave as a formatted input function and as an unformatted
|
</span></dt><dd><p>They behave as a formatted input function and as an unformatted
|
||||||
input function, respectively (except that <code class="code">getline</code> is
|
input function, respectively (except that <code class="code">getline</code> is
|
||||||
not required to set <code class="code">gcount</code>).
|
not required to set <code class="code">gcount</code>).
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#103" target="_top">103</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#103">103</a>:
|
||||||
<span class="emphasis"><em>set::iterator is required to be modifiable, but this allows
|
<span class="emphasis"><em>set::iterator is required to be modifiable, but this allows
|
||||||
modification of keys.</em></span>
|
modification of keys.</em></span>
|
||||||
</span></dt><dd><p>For associative containers where the value type is the same as
|
</span></dt><dd><p>For associative containers where the value type is the same as
|
||||||
the key type, both <code class="code">iterator</code> and <code class="code">const_iterator
|
the key type, both <code class="code">iterator</code> and <code class="code">const_iterator
|
||||||
</code> are constant iterators.
|
</code> are constant iterators.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#109" target="_top">109</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#109">109</a>:
|
||||||
<span class="emphasis"><em>Missing binders for non-const sequence elements</em></span>
|
<span class="emphasis"><em>Missing binders for non-const sequence elements</em></span>
|
||||||
</span></dt><dd><p>The <code class="code">binder1st</code> and <code class="code">binder2nd</code> didn't have an
|
</span></dt><dd><p>The <code class="code">binder1st</code> and <code class="code">binder2nd</code> didn't have an
|
||||||
<code class="code">operator()</code> taking a non-const parameter.
|
<code class="code">operator()</code> taking a non-const parameter.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#110" target="_top">110</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#110">110</a>:
|
||||||
<span class="emphasis"><em>istreambuf_iterator::equal not const</em></span>
|
<span class="emphasis"><em>istreambuf_iterator::equal not const</em></span>
|
||||||
</span></dt><dd><p>This was not a const member function. Note that the DR says to
|
</span></dt><dd><p>This was not a const member function. Note that the DR says to
|
||||||
replace the function with a const one; we have instead provided an
|
replace the function with a const one; we have instead provided an
|
||||||
overloaded version with identical contents.
|
overloaded version with identical contents.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#117" target="_top">117</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#117">117</a>:
|
||||||
<span class="emphasis"><em>basic_ostream uses nonexistent num_put member functions</em></span>
|
<span class="emphasis"><em>basic_ostream uses nonexistent num_put member functions</em></span>
|
||||||
</span></dt><dd><p><code class="code">num_put::put()</code> was overloaded on the wrong types.
|
</span></dt><dd><p><code class="code">num_put::put()</code> was overloaded on the wrong types.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#118" target="_top">118</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#118">118</a>:
|
||||||
<span class="emphasis"><em>basic_istream uses nonexistent num_get member functions</em></span>
|
<span class="emphasis"><em>basic_istream uses nonexistent num_get member functions</em></span>
|
||||||
</span></dt><dd><p>Same as 117, but for <code class="code">num_get::get()</code>.
|
</span></dt><dd><p>Same as 117, but for <code class="code">num_get::get()</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#129" target="_top">129</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#129">129</a>:
|
||||||
<span class="emphasis"><em>Need error indication from seekp() and seekg()</em></span>
|
<span class="emphasis"><em>Need error indication from seekp() and seekg()</em></span>
|
||||||
</span></dt><dd><p>These functions set <code class="code">failbit</code> on error now.
|
</span></dt><dd><p>These functions set <code class="code">failbit</code> on error now.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#130" target="_top">130</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#130">130</a>:
|
||||||
<span class="emphasis"><em>Return type of container::erase(iterator) differs for associative containers</em></span>
|
<span class="emphasis"><em>Return type of container::erase(iterator) differs for associative containers</em></span>
|
||||||
</span></dt><dd><p>Make member <code class="code">erase</code> return iterator for <code class="code">set</code>, <code class="code">multiset</code>, <code class="code">map</code>, <code class="code">multimap</code>.
|
</span></dt><dd><p>Make member <code class="code">erase</code> return iterator for <code class="code">set</code>, <code class="code">multiset</code>, <code class="code">map</code>, <code class="code">multimap</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#136" target="_top">136</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#136">136</a>:
|
||||||
<span class="emphasis"><em>seekp, seekg setting wrong streams?</em></span>
|
<span class="emphasis"><em>seekp, seekg setting wrong streams?</em></span>
|
||||||
</span></dt><dd><p><code class="code">seekp</code> should only set the output stream, and
|
</span></dt><dd><p><code class="code">seekp</code> should only set the output stream, and
|
||||||
<code class="code">seekg</code> should only set the input stream.
|
<code class="code">seekg</code> should only set the input stream.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#167" target="_top">167</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#167">167</a>:
|
||||||
<span class="emphasis"><em>Improper use of traits_type::length()</em></span>
|
<span class="emphasis"><em>Improper use of traits_type::length()</em></span>
|
||||||
</span></dt><dd><p><code class="code">op<<</code> with a <code class="code">const char*</code> was
|
</span></dt><dd><p><code class="code">op<<</code> with a <code class="code">const char*</code> was
|
||||||
calculating an incorrect number of characters to write.
|
calculating an incorrect number of characters to write.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#169" target="_top">169</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#169">169</a>:
|
||||||
<span class="emphasis"><em>Bad efficiency of overflow() mandated</em></span>
|
<span class="emphasis"><em>Bad efficiency of overflow() mandated</em></span>
|
||||||
</span></dt><dd><p>Grow efficiently the internal array object.
|
</span></dt><dd><p>Grow efficiently the internal array object.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#171" target="_top">171</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#171">171</a>:
|
||||||
<span class="emphasis"><em>Strange seekpos() semantics due to joint position</em></span>
|
<span class="emphasis"><em>Strange seekpos() semantics due to joint position</em></span>
|
||||||
</span></dt><dd><p>Quite complex to summarize...
|
</span></dt><dd><p>Quite complex to summarize...
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#181" target="_top">181</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#181">181</a>:
|
||||||
<span class="emphasis"><em>make_pair() unintended behavior</em></span>
|
<span class="emphasis"><em>make_pair() unintended behavior</em></span>
|
||||||
</span></dt><dd><p>This function used to take its arguments as reference-to-const, now
|
</span></dt><dd><p>This function used to take its arguments as reference-to-const, now
|
||||||
it copies them (pass by value).
|
it copies them (pass by value).
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#195" target="_top">195</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#195">195</a>:
|
||||||
<span class="emphasis"><em>Should basic_istream::sentry's constructor ever set eofbit?</em></span>
|
<span class="emphasis"><em>Should basic_istream::sentry's constructor ever set eofbit?</em></span>
|
||||||
</span></dt><dd><p>Yes, it can, specifically if EOF is reached while skipping whitespace.
|
</span></dt><dd><p>Yes, it can, specifically if EOF is reached while skipping whitespace.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#211" target="_top">211</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#211">211</a>:
|
||||||
<span class="emphasis"><em>operator>>(istream&, string&) doesn't set failbit</em></span>
|
<span class="emphasis"><em>operator>>(istream&, string&) doesn't set failbit</em></span>
|
||||||
</span></dt><dd><p>If nothing is extracted into the string, <code class="code">op>></code> now
|
</span></dt><dd><p>If nothing is extracted into the string, <code class="code">op>></code> now
|
||||||
sets <code class="code">failbit</code> (which can cause an exception, etc., etc.).
|
sets <code class="code">failbit</code> (which can cause an exception, etc., etc.).
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#214" target="_top">214</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#214">214</a>:
|
||||||
<span class="emphasis"><em>set::find() missing const overload</em></span>
|
<span class="emphasis"><em>set::find() missing const overload</em></span>
|
||||||
</span></dt><dd><p>Both <code class="code">set</code> and <code class="code">multiset</code> were missing
|
</span></dt><dd><p>Both <code class="code">set</code> and <code class="code">multiset</code> were missing
|
||||||
overloaded find, lower_bound, upper_bound, and equal_range functions
|
overloaded find, lower_bound, upper_bound, and equal_range functions
|
||||||
for const instances.
|
for const instances.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#231" target="_top">231</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#231">231</a>:
|
||||||
<span class="emphasis"><em>Precision in iostream?</em></span>
|
<span class="emphasis"><em>Precision in iostream?</em></span>
|
||||||
</span></dt><dd><p>For conversion from a floating-point type, <code class="code">str.precision()</code>
|
</span></dt><dd><p>For conversion from a floating-point type, <code class="code">str.precision()</code>
|
||||||
is specified in the conversion specification.
|
is specified in the conversion specification.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#233" target="_top">233</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#233">233</a>:
|
||||||
<span class="emphasis"><em>Insertion hints in associative containers</em></span>
|
<span class="emphasis"><em>Insertion hints in associative containers</em></span>
|
||||||
</span></dt><dd><p>Implement N1780, first check before then check after, insert as close
|
</span></dt><dd><p>Implement N1780, first check before then check after, insert as close
|
||||||
to hint as possible.
|
to hint as possible.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#235" target="_top">235</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#235">235</a>:
|
||||||
<span class="emphasis"><em>No specification of default ctor for reverse_iterator</em></span>
|
<span class="emphasis"><em>No specification of default ctor for reverse_iterator</em></span>
|
||||||
</span></dt><dd><p>The declaration of <code class="code">reverse_iterator</code> lists a default constructor.
|
</span></dt><dd><p>The declaration of <code class="code">reverse_iterator</code> lists a default constructor.
|
||||||
However, no specification is given what this constructor should do.
|
However, no specification is given what this constructor should do.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#241" target="_top">241</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#241">241</a>:
|
||||||
<span class="emphasis"><em>Does unique_copy() require CopyConstructible and Assignable?</em></span>
|
<span class="emphasis"><em>Does unique_copy() require CopyConstructible and Assignable?</em></span>
|
||||||
</span></dt><dd><p>Add a helper for forward_iterator/output_iterator, fix the existing
|
</span></dt><dd><p>Add a helper for forward_iterator/output_iterator, fix the existing
|
||||||
one for input_iterator/output_iterator to not rely on Assignability.
|
one for input_iterator/output_iterator to not rely on Assignability.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#243" target="_top">243</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#243">243</a>:
|
||||||
<span class="emphasis"><em>get and getline when sentry reports failure</em></span>
|
<span class="emphasis"><em>get and getline when sentry reports failure</em></span>
|
||||||
</span></dt><dd><p>Store a null character only if the character array has a non-zero size.
|
</span></dt><dd><p>Store a null character only if the character array has a non-zero size.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#251" target="_top">251</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#251">251</a>:
|
||||||
<span class="emphasis"><em>basic_stringbuf missing allocator_type</em></span>
|
<span class="emphasis"><em>basic_stringbuf missing allocator_type</em></span>
|
||||||
</span></dt><dd><p>This nested typedef was originally not specified.
|
</span></dt><dd><p>This nested typedef was originally not specified.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#253" target="_top">253</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#253">253</a>:
|
||||||
<span class="emphasis"><em>valarray helper functions are almost entirely useless</em></span>
|
<span class="emphasis"><em>valarray helper functions are almost entirely useless</em></span>
|
||||||
</span></dt><dd><p>Make the copy constructor and copy-assignment operator declarations
|
</span></dt><dd><p>Make the copy constructor and copy-assignment operator declarations
|
||||||
public in gslice_array, indirect_array, mask_array, slice_array; provide
|
public in gslice_array, indirect_array, mask_array, slice_array; provide
|
||||||
definitions.
|
definitions.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#265" target="_top">265</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#265">265</a>:
|
||||||
<span class="emphasis"><em>std::pair::pair() effects overly restrictive</em></span>
|
<span class="emphasis"><em>std::pair::pair() effects overly restrictive</em></span>
|
||||||
</span></dt><dd><p>The default ctor would build its members from copies of temporaries;
|
</span></dt><dd><p>The default ctor would build its members from copies of temporaries;
|
||||||
now it simply uses their respective default ctors.
|
now it simply uses their respective default ctors.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#266" target="_top">266</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#266">266</a>:
|
||||||
<span class="emphasis"><em>bad_exception::~bad_exception() missing Effects clause</em></span>
|
<span class="emphasis"><em>bad_exception::~bad_exception() missing Effects clause</em></span>
|
||||||
</span></dt><dd><p>The <code class="code">bad_</code>* classes no longer have destructors (they
|
</span></dt><dd><p>The <code class="code">bad_</code>* classes no longer have destructors (they
|
||||||
are trivial), since no description of them was ever given.
|
are trivial), since no description of them was ever given.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#271" target="_top">271</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#271">271</a>:
|
||||||
<span class="emphasis"><em>basic_iostream missing typedefs</em></span>
|
<span class="emphasis"><em>basic_iostream missing typedefs</em></span>
|
||||||
</span></dt><dd><p>The typedefs it inherits from its base classes can't be used, since
|
</span></dt><dd><p>The typedefs it inherits from its base classes can't be used, since
|
||||||
(for example) <code class="code">basic_iostream<T>::traits_type</code> is ambiguous.
|
(for example) <code class="code">basic_iostream<T>::traits_type</code> is ambiguous.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#275" target="_top">275</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#275">275</a>:
|
||||||
<span class="emphasis"><em>Wrong type in num_get::get() overloads</em></span>
|
<span class="emphasis"><em>Wrong type in num_get::get() overloads</em></span>
|
||||||
</span></dt><dd><p>Similar to 118.
|
</span></dt><dd><p>Similar to 118.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#280" target="_top">280</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#280">280</a>:
|
||||||
<span class="emphasis"><em>Comparison of reverse_iterator to const reverse_iterator</em></span>
|
<span class="emphasis"><em>Comparison of reverse_iterator to const reverse_iterator</em></span>
|
||||||
</span></dt><dd><p>Add global functions with two template parameters.
|
</span></dt><dd><p>Add global functions with two template parameters.
|
||||||
(NB: not added for now a templated assignment operator)
|
(NB: not added for now a templated assignment operator)
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#292" target="_top">292</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#292">292</a>:
|
||||||
<span class="emphasis"><em>Effects of a.copyfmt (a)</em></span>
|
<span class="emphasis"><em>Effects of a.copyfmt (a)</em></span>
|
||||||
</span></dt><dd><p>If <code class="code">(this == &rhs)</code> do nothing.
|
</span></dt><dd><p>If <code class="code">(this == &rhs)</code> do nothing.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#300" target="_top">300</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#300">300</a>:
|
||||||
<span class="emphasis"><em>List::merge() specification incomplete</em></span>
|
<span class="emphasis"><em>List::merge() specification incomplete</em></span>
|
||||||
</span></dt><dd><p>If <code class="code">(this == &x)</code> do nothing.
|
</span></dt><dd><p>If <code class="code">(this == &x)</code> do nothing.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#303" target="_top">303</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#303">303</a>:
|
||||||
<span class="emphasis"><em>Bitset input operator underspecified</em></span>
|
<span class="emphasis"><em>Bitset input operator underspecified</em></span>
|
||||||
</span></dt><dd><p>Basically, compare the input character to
|
</span></dt><dd><p>Basically, compare the input character to
|
||||||
<code class="code">is.widen(0)</code> and <code class="code">is.widen(1)</code>.
|
<code class="code">is.widen(0)</code> and <code class="code">is.widen(1)</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#305" target="_top">305</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#305">305</a>:
|
||||||
<span class="emphasis"><em>Default behavior of codecvt<wchar_t, char,
|
<span class="emphasis"><em>Default behavior of codecvt<wchar_t, char,
|
||||||
mbstate_t>::length()</em></span>
|
mbstate_t>::length()</em></span>
|
||||||
</span></dt><dd><p>Do not specify what <code class="code">codecvt<wchar_t, char,
|
</span></dt><dd><p>Do not specify what <code class="code">codecvt<wchar_t, char,
|
||||||
mbstate_t>::do_length</code> must return.
|
mbstate_t>::do_length</code> must return.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#328" target="_top">328</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#328">328</a>:
|
||||||
<span class="emphasis"><em>Bad sprintf format modifier in
|
<span class="emphasis"><em>Bad sprintf format modifier in
|
||||||
money_put<>::do_put()</em></span>
|
money_put<>::do_put()</em></span>
|
||||||
</span></dt><dd><p>Change the format string to "%.0Lf".
|
</span></dt><dd><p>Change the format string to "%.0Lf".
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#365" target="_top">365</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#365">365</a>:
|
||||||
<span class="emphasis"><em>Lack of const-qualification in clause 27</em></span>
|
<span class="emphasis"><em>Lack of const-qualification in clause 27</em></span>
|
||||||
</span></dt><dd><p>Add const overloads of <code class="code">is_open</code>.
|
</span></dt><dd><p>Add const overloads of <code class="code">is_open</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#387" target="_top">387</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#387">387</a>:
|
||||||
<span class="emphasis"><em>std::complex over-encapsulated</em></span>
|
<span class="emphasis"><em>std::complex over-encapsulated</em></span>
|
||||||
</span></dt><dd><p>Add the <code class="code">real(T)</code> and <code class="code">imag(T)</code>
|
</span></dt><dd><p>Add the <code class="code">real(T)</code> and <code class="code">imag(T)</code>
|
||||||
members; in C++0x mode, also adjust the existing
|
members; in C++0x mode, also adjust the existing
|
||||||
<code class="code">real()</code> and <code class="code">imag()</code> members and
|
<code class="code">real()</code> and <code class="code">imag()</code> members and
|
||||||
free functions.
|
free functions.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#389" target="_top">389</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#389">389</a>:
|
||||||
<span class="emphasis"><em>Const overload of valarray::operator[] returns
|
<span class="emphasis"><em>Const overload of valarray::operator[] returns
|
||||||
by value</em></span>
|
by value</em></span>
|
||||||
</span></dt><dd><p>Change it to return a <code class="code">const T&</code>.
|
</span></dt><dd><p>Change it to return a <code class="code">const T&</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#396" target="_top">396</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#396">396</a>:
|
||||||
<span class="emphasis"><em>what are characters zero and one</em></span>
|
<span class="emphasis"><em>what are characters zero and one</em></span>
|
||||||
</span></dt><dd><p>Implement the proposed resolution.
|
</span></dt><dd><p>Implement the proposed resolution.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#402" target="_top">402</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#402">402</a>:
|
||||||
<span class="emphasis"><em>Wrong new expression in [some_]allocator::construct</em></span>
|
<span class="emphasis"><em>Wrong new expression in [some_]allocator::construct</em></span>
|
||||||
</span></dt><dd><p>Replace "new" with "::new".
|
</span></dt><dd><p>Replace "new" with "::new".
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-active.html#408" target="_top">408</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#408">408</a>:
|
||||||
<span class="emphasis"><em>
|
<span class="emphasis"><em>
|
||||||
Is vector<reverse_iterator<char*> > forbidden?
|
Is vector<reverse_iterator<char*> > forbidden?
|
||||||
</em></span>
|
</em></span>
|
||||||
</span></dt><dd><p>Tweak the debug-mode checks in _Safe_iterator.
|
</span></dt><dd><p>Tweak the debug-mode checks in _Safe_iterator.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#409" target="_top">409</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#409">409</a>:
|
||||||
<span class="emphasis"><em>Closing an fstream should clear the error state</em></span>
|
<span class="emphasis"><em>Closing an fstream should clear the error state</em></span>
|
||||||
</span></dt><dd><p>Have <code class="code">open</code> clear the error flags.
|
</span></dt><dd><p>Have <code class="code">open</code> clear the error flags.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-closed.html#431" target="_top">431</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#431">431</a>:
|
||||||
<span class="emphasis"><em>Swapping containers with unequal allocators</em></span>
|
<span class="emphasis"><em>Swapping containers with unequal allocators</em></span>
|
||||||
</span></dt><dd><p>Implement Option 3, as per N1599.
|
</span></dt><dd><p>Implement Option 3, as per N1599.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#432" target="_top">432</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#432">432</a>:
|
||||||
<span class="emphasis"><em>stringbuf::overflow() makes only one write position
|
<span class="emphasis"><em>stringbuf::overflow() makes only one write position
|
||||||
available</em></span>
|
available</em></span>
|
||||||
</span></dt><dd><p>Implement the resolution, beyond DR 169.
|
</span></dt><dd><p>Implement the resolution, beyond DR 169.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#434" target="_top">434</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#434">434</a>:
|
||||||
<span class="emphasis"><em>bitset::to_string() hard to use</em></span>
|
<span class="emphasis"><em>bitset::to_string() hard to use</em></span>
|
||||||
</span></dt><dd><p>Add three overloads, taking fewer template arguments.
|
</span></dt><dd><p>Add three overloads, taking fewer template arguments.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#438" target="_top">438</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#438">438</a>:
|
||||||
<span class="emphasis"><em>Ambiguity in the "do the right thing" clause</em></span>
|
<span class="emphasis"><em>Ambiguity in the "do the right thing" clause</em></span>
|
||||||
</span></dt><dd><p>Implement the resolution, basically cast less.
|
</span></dt><dd><p>Implement the resolution, basically cast less.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#453" target="_top">453</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#453">453</a>:
|
||||||
<span class="emphasis"><em>basic_stringbuf::seekoff need not always fail for an empty stream</em></span>
|
<span class="emphasis"><em>basic_stringbuf::seekoff need not always fail for an empty stream</em></span>
|
||||||
</span></dt><dd><p>Don't fail if the next pointer is null and newoff is zero.
|
</span></dt><dd><p>Don't fail if the next pointer is null and newoff is zero.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#455" target="_top">455</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#455">455</a>:
|
||||||
<span class="emphasis"><em>cerr::tie() and wcerr::tie() are overspecified</em></span>
|
<span class="emphasis"><em>cerr::tie() and wcerr::tie() are overspecified</em></span>
|
||||||
</span></dt><dd><p>Initialize cerr tied to cout and wcerr tied to wcout.
|
</span></dt><dd><p>Initialize cerr tied to cout and wcerr tied to wcout.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#464" target="_top">464</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#464">464</a>:
|
||||||
<span class="emphasis"><em>Suggestion for new member functions in standard containers</em></span>
|
<span class="emphasis"><em>Suggestion for new member functions in standard containers</em></span>
|
||||||
</span></dt><dd><p>Add <code class="code">data()</code> to <code class="code">std::vector</code> and
|
</span></dt><dd><p>Add <code class="code">data()</code> to <code class="code">std::vector</code> and
|
||||||
<code class="code">at(const key_type&)</code> to <code class="code">std::map</code>.
|
<code class="code">at(const key_type&)</code> to <code class="code">std::map</code>.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#508" target="_top">508</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#508">508</a>:
|
||||||
<span class="emphasis"><em>Bad parameters for ranlux64_base_01</em></span>
|
<span class="emphasis"><em>Bad parameters for ranlux64_base_01</em></span>
|
||||||
</span></dt><dd><p>Fix the parameters.
|
</span></dt><dd><p>Fix the parameters.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-closed.html#512" target="_top">512</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#512">512</a>:
|
||||||
<span class="emphasis"><em>Seeding subtract_with_carry_01 from a single unsigned long</em></span>
|
<span class="emphasis"><em>Seeding subtract_with_carry_01 from a single unsigned long</em></span>
|
||||||
</span></dt><dd><p>Construct a <code class="code">linear_congruential</code> engine and seed with it.
|
</span></dt><dd><p>Construct a <code class="code">linear_congruential</code> engine and seed with it.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-closed.html#526" target="_top">526</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#526">526</a>:
|
||||||
<span class="emphasis"><em>Is it undefined if a function in the standard changes in
|
<span class="emphasis"><em>Is it undefined if a function in the standard changes in
|
||||||
parameters?</em></span>
|
parameters?</em></span>
|
||||||
</span></dt><dd><p>Use &value.
|
</span></dt><dd><p>Use &value.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#538" target="_top">538</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#538">538</a>:
|
||||||
<span class="emphasis"><em>241 again: Does unique_copy() require CopyConstructible
|
<span class="emphasis"><em>241 again: Does unique_copy() require CopyConstructible
|
||||||
and Assignable?</em></span>
|
and Assignable?</em></span>
|
||||||
</span></dt><dd><p>In case of input_iterator/output_iterator rely on Assignability of
|
</span></dt><dd><p>In case of input_iterator/output_iterator rely on Assignability of
|
||||||
input_iterator' value_type.
|
input_iterator' value_type.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-active.html#539" target="_top">539</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#539">539</a>:
|
||||||
<span class="emphasis"><em>partial_sum and adjacent_difference should mention
|
<span class="emphasis"><em>partial_sum and adjacent_difference should mention
|
||||||
requirements</em></span>
|
requirements</em></span>
|
||||||
</span></dt><dd><p>We were almost doing the right thing, just use std::move
|
</span></dt><dd><p>We were almost doing the right thing, just use std::move
|
||||||
in adjacent_difference.
|
in adjacent_difference.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#541" target="_top">541</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#541">541</a>:
|
||||||
<span class="emphasis"><em>shared_ptr template assignment and void</em></span>
|
<span class="emphasis"><em>shared_ptr template assignment and void</em></span>
|
||||||
</span></dt><dd><p>Add an auto_ptr<void> specialization.
|
</span></dt><dd><p>Add an auto_ptr<void> specialization.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#543" target="_top">543</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#543">543</a>:
|
||||||
<span class="emphasis"><em>valarray slice default constructor</em></span>
|
<span class="emphasis"><em>valarray slice default constructor</em></span>
|
||||||
</span></dt><dd><p>Follow the straightforward proposed resolution.
|
</span></dt><dd><p>Follow the straightforward proposed resolution.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#550" target="_top">550</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#550">550</a>:
|
||||||
<span class="emphasis"><em>What should the return type of pow(float,int) be?</em></span>
|
<span class="emphasis"><em>What should the return type of pow(float,int) be?</em></span>
|
||||||
</span></dt><dd><p>In C++0x mode, remove the pow(float,int), etc., signatures.
|
</span></dt><dd><p>In C++0x mode, remove the pow(float,int), etc., signatures.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#586" target="_top">586</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#586">586</a>:
|
||||||
<span class="emphasis"><em>string inserter not a formatted function</em></span>
|
<span class="emphasis"><em>string inserter not a formatted function</em></span>
|
||||||
</span></dt><dd><p>Change it to be a formatted output function (i.e. catch exceptions).
|
</span></dt><dd><p>Change it to be a formatted output function (i.e. catch exceptions).
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#596" target="_top">596</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#596">596</a>:
|
||||||
<span class="emphasis"><em>27.8.1.3 Table 112 omits "a+" and "a+b" modes</em></span>
|
<span class="emphasis"><em>27.8.1.3 Table 112 omits "a+" and "a+b" modes</em></span>
|
||||||
</span></dt><dd><p>Add the missing modes to fopen_mode.
|
</span></dt><dd><p>Add the missing modes to fopen_mode.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#630" target="_top">630</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#630">630</a>:
|
||||||
<span class="emphasis"><em>arrays of valarray</em></span>
|
<span class="emphasis"><em>arrays of valarray</em></span>
|
||||||
</span></dt><dd><p>Implement the simple resolution.
|
</span></dt><dd><p>Implement the simple resolution.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#660" target="_top">660</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#660">660</a>:
|
||||||
<span class="emphasis"><em>Missing bitwise operations</em></span>
|
<span class="emphasis"><em>Missing bitwise operations</em></span>
|
||||||
</span></dt><dd><p>Add the missing operations.
|
</span></dt><dd><p>Add the missing operations.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#691" target="_top">691</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#691">691</a>:
|
||||||
<span class="emphasis"><em>const_local_iterator cbegin, cend missing from TR1</em></span>
|
<span class="emphasis"><em>const_local_iterator cbegin, cend missing from TR1</em></span>
|
||||||
</span></dt><dd><p>In C++0x mode add cbegin(size_type) and cend(size_type)
|
</span></dt><dd><p>In C++0x mode add cbegin(size_type) and cend(size_type)
|
||||||
to the unordered containers.
|
to the unordered containers.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#693" target="_top">693</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#693">693</a>:
|
||||||
<span class="emphasis"><em>std::bitset::all() missing</em></span>
|
<span class="emphasis"><em>std::bitset::all() missing</em></span>
|
||||||
</span></dt><dd><p>Add it, consistently with the discussion.
|
</span></dt><dd><p>Add it, consistently with the discussion.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#695" target="_top">695</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#695">695</a>:
|
||||||
<span class="emphasis"><em>ctype<char>::classic_table() not accessible</em></span>
|
<span class="emphasis"><em>ctype<char>::classic_table() not accessible</em></span>
|
||||||
</span></dt><dd><p>Make the member functions table and classic_table public.
|
</span></dt><dd><p>Make the member functions table and classic_table public.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#696" target="_top">696</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#696">696</a>:
|
||||||
<span class="emphasis"><em>istream::operator>>(int&) broken</em></span>
|
<span class="emphasis"><em>istream::operator>>(int&) broken</em></span>
|
||||||
</span></dt><dd><p>Implement the straightforward resolution.
|
</span></dt><dd><p>Implement the straightforward resolution.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#761" target="_top">761</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#761">761</a>:
|
||||||
<span class="emphasis"><em>unordered_map needs an at() member function</em></span>
|
<span class="emphasis"><em>unordered_map needs an at() member function</em></span>
|
||||||
</span></dt><dd><p>In C++0x mode, add at() and at() const.
|
</span></dt><dd><p>In C++0x mode, add at() and at() const.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#775" target="_top">775</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#775">775</a>:
|
||||||
<span class="emphasis"><em>Tuple indexing should be unsigned?</em></span>
|
<span class="emphasis"><em>Tuple indexing should be unsigned?</em></span>
|
||||||
</span></dt><dd><p>Implement the int -> size_t replacements.
|
</span></dt><dd><p>Implement the int -> size_t replacements.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#776" target="_top">776</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#776">776</a>:
|
||||||
<span class="emphasis"><em>Undescribed assign function of std::array</em></span>
|
<span class="emphasis"><em>Undescribed assign function of std::array</em></span>
|
||||||
</span></dt><dd><p>In C++0x mode, remove assign, add fill.
|
</span></dt><dd><p>In C++0x mode, remove assign, add fill.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#781" target="_top">781</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#781">781</a>:
|
||||||
<span class="emphasis"><em>std::complex should add missing C99 functions</em></span>
|
<span class="emphasis"><em>std::complex should add missing C99 functions</em></span>
|
||||||
</span></dt><dd><p>In C++0x mode, add std::proj.
|
</span></dt><dd><p>In C++0x mode, add std::proj.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#809" target="_top">809</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#809">809</a>:
|
||||||
<span class="emphasis"><em>std::swap should be overloaded for array types</em></span>
|
<span class="emphasis"><em>std::swap should be overloaded for array types</em></span>
|
||||||
</span></dt><dd><p>Add the overload.
|
</span></dt><dd><p>Add the overload.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#844" target="_top">844</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#844">844</a>:
|
||||||
<span class="emphasis"><em>complex pow return type is ambiguous</em></span>
|
<span class="emphasis"><em>complex pow return type is ambiguous</em></span>
|
||||||
</span></dt><dd><p>In C++0x mode, remove the pow(complex<T>, int) signature.
|
</span></dt><dd><p>In C++0x mode, remove the pow(complex<T>, int) signature.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#853" target="_top">853</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#853">853</a>:
|
||||||
<span class="emphasis"><em>to_string needs updating with zero and one</em></span>
|
<span class="emphasis"><em>to_string needs updating with zero and one</em></span>
|
||||||
</span></dt><dd><p>Update / add the signatures.
|
</span></dt><dd><p>Update / add the signatures.
|
||||||
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-active.html#865" target="_top">865</a>:
|
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#865">865</a>:
|
||||||
<span class="emphasis"><em>More algorithms that throw away information</em></span>
|
<span class="emphasis"><em>More algorithms that throw away information</em></span>
|
||||||
</span></dt><dd><p>The traditional HP / SGI return type and value is blessed
|
</span></dt><dd><p>The traditional HP / SGI return type and value is blessed
|
||||||
by the resolution of the DR.
|
by the resolution of the DR.
|
||||||
</p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
|
</p></dd></dl></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="license.html">Prev</a> </td><td align="center"><a accesskey="u" href="status.html">Up</a></td><td align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td align="left" valign="top">License </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15. Concurrency</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library , mutex , thread , future , condition_variable " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14. Atomics" /><link rel="next" href="extensions.html" title="Part III. Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 15. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library , mutex , thread , future , condition_variable "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="atomics.html" title="Chapter 14. Atomics"/><link rel="next" href="extensions.html" title="Part III. Extensions"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15.
|
||||||
Concurrency
|
Concurrency
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 15. Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15.
|
</th><td align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 15. Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"/>Chapter 15.
|
||||||
Concurrency
|
Concurrency
|
||||||
<a id="id387949" class="indexterm"></a>
|
<a id="id484728" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
|
||||||
Facilities for concurrent operation, and control thereof.
|
Facilities for concurrent operation, and control thereof.
|
||||||
</p><div class="sect1" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
|
</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency.api"/>API Reference</h2></div></div></div><p>
|
||||||
All items are declared in one of four standard header files.
|
All items are declared in one of four standard header files.
|
||||||
</p><p>
|
</p><p>
|
||||||
In header <code class="filename">mutex</code>, class
|
In header <code class="filename">mutex</code>, class
|
||||||
|
|
@ -33,10 +33,10 @@
|
||||||
and <code class="classname">packaged_task</code>.
|
and <code class="classname">packaged_task</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Full API details.
|
Full API details.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 14.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 14.
|
||||||
Atomics
|
Atomics
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part III.
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , configure , options " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="setup.html" title="Chapter 2. Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Configure"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , configure , options "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="setup.html" title="Chapter 2. Setup"/><link rel="prev" href="setup.html" title="Chapter 2. Setup"/><link rel="next" href="make.html" title="Make"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr/></div><div class="section" title="Configure"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup.configure"/>Configure</h2></div></div></div><p>
|
||||||
When configuring libstdc++, you'll have to configure the entire
|
When configuring libstdc++, you'll have to configure the entire
|
||||||
<span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
|
<span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
|
||||||
toplevel gcc configuration option
|
toplevel gcc configuration option
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
Here are all of the configure options specific to libstdc++. Keep
|
Here are all of the configure options specific to libstdc++. Keep
|
||||||
in mind that
|
in mind that
|
||||||
|
|
||||||
<a class="ulink" href="http://sourceware.org/autobook/autobook/autobook_14.html" target="_top">they
|
<a class="link" href="http://sourceware.org/autobook/autobook/autobook_14.html">they
|
||||||
all have opposite forms as well</a> (enable/disable and
|
all have opposite forms as well</a> (enable/disable and
|
||||||
with/without). The defaults are for the <span class="emphasis"><em>current
|
with/without). The defaults are for the <span class="emphasis"><em>current
|
||||||
development sources</em></span>, which may be different than those
|
development sources</em></span>, which may be different than those
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
libstdc++'s include files will be installed in
|
libstdc++'s include files will be installed in
|
||||||
<code class="code">${libdir}/gcc-lib/${target_alias}/${gcc_version}/include/g++</code>,
|
<code class="code">${libdir}/gcc-lib/${target_alias}/${gcc_version}/include/g++</code>,
|
||||||
unless you also specify
|
unless you also specify
|
||||||
<code class="literal">--with-gxx-include-dir=<code class="filename">dirname</code></code> during configuration.
|
<code class="literal">--with-gxx-include-dir=</code><code class="filename">dirname</code> during configuration.
|
||||||
</p></dd><dt><span class="term"><code class="code">--with-gxx-include-dir=<include-files dir></code></span></dt><dd><p>Adds support for named libstdc++ include directory. For instance,
|
</p></dd><dt><span class="term"><code class="code">--with-gxx-include-dir=<include-files dir></code></span></dt><dd><p>Adds support for named libstdc++ include directory. For instance,
|
||||||
the following puts all the libstdc++ headers into a directory
|
the following puts all the libstdc++ headers into a directory
|
||||||
called "4.4-20090404" instead of the usual
|
called "4.4-20090404" instead of the usual
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix
|
choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix
|
||||||
(IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets,
|
(IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets,
|
||||||
'gnu' to specify a model based on functionality from the GNU C
|
'gnu' to specify a model based on functionality from the GNU C
|
||||||
library (langinfo/iconv/gettext) (from <a class="ulink" href="http://sources.redhat.com/glibc/" target="_top">glibc</a>, the GNU C
|
library (langinfo/iconv/gettext) (from <a class="link" href="http://sources.redhat.com/glibc/">glibc</a>, the GNU C
|
||||||
library), or 'generic' to use a generic "C"
|
library), or 'generic' to use a generic "C"
|
||||||
abstraction which consists of "C" locale info.
|
abstraction which consists of "C" locale info.
|
||||||
</p><p>If not explicitly specified, the configure proccess tries
|
</p><p>If not explicitly specified, the configure proccess tries
|
||||||
|
|
@ -80,7 +80,7 @@
|
||||||
(described next).
|
(described next).
|
||||||
</p></dd><dt><span class="term"><code class="code">--enable-threads=OPTION</code></span></dt><dd><p>Select a threading library. A full description is
|
</p></dd><dt><span class="term"><code class="code">--enable-threads=OPTION</code></span></dt><dd><p>Select a threading library. A full description is
|
||||||
given in the
|
given in the
|
||||||
general <a class="ulink" href="http://gcc.gnu.org/install/configure.html" target="_top">compiler
|
general <a class="link" href="http://gcc.gnu.org/install/configure.html">compiler
|
||||||
configuration instructions</a>. This option can change the
|
configuration instructions</a>. This option can change the
|
||||||
library ABI.
|
library ABI.
|
||||||
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-debug</code></span></dt><dd><p>Build separate debug libraries in addition to what is normally built.
|
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-debug</code></span></dt><dd><p>Build separate debug libraries in addition to what is normally built.
|
||||||
|
|
@ -200,4 +200,4 @@
|
||||||
linking of libpthread too, which activates locking, a large overhead
|
linking of libpthread too, which activates locking, a large overhead
|
||||||
for single-thread programs. OPTION=no skips the tests completely.
|
for single-thread programs. OPTION=no skips the tests completely.
|
||||||
The default is OPTION=no.
|
The default is OPTION=no.
|
||||||
</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Setup </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Make</td></tr></table></div></body></html>
|
</p></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td align="center"><a accesskey="u" href="setup.html">Up</a></td><td align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 2. Setup </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Make</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9. Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 9. Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="facets.html" title="Facets"/><link rel="next" href="associative.html" title="Associative"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9.
|
||||||
Containers
|
Containers
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 9. Containers"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9.
|
</th><td align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 9. Containers"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"/>Chapter 9.
|
||||||
Containers
|
Containers
|
||||||
<a id="id479957" class="indexterm"></a>
|
<a id="id481776" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="sect2"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="sect1"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="sect2"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect2"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="sect1"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="sect1" title="Sequences"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="sect2" title="list"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="sect3" title="list::size() is O(n)"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section" title="Sequences"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers.sequences"/>Sequences</h2></div></div></div><div class="section" title="list"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"/>list</h3></div></div></div><div class="section" title="list::size() is O(n)"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"/>list::size() is O(n)</h4></div></div></div><p>
|
||||||
Yes it is, and that's okay. This is a decision that we preserved
|
Yes it is, and that's okay. This is a decision that we preserved
|
||||||
when we imported SGI's STL implementation. The following is
|
when we imported SGI's STL implementation. The following is
|
||||||
quoted from <a class="ulink" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
|
quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html">their FAQ</a>:
|
||||||
</p><div class="blockquote"><blockquote class="blockquote"><p>
|
</p><div class="blockquote"><blockquote class="blockquote"><p>
|
||||||
The size() member function, for list and slist, takes time
|
The size() member function, for list and slist, takes time
|
||||||
proportional to the number of elements in the list. This was a
|
proportional to the number of elements in the list. This was a
|
||||||
|
|
@ -42,14 +42,14 @@
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
if (L.empty())
|
if (L.empty())
|
||||||
...
|
...
|
||||||
</pre></blockquote></div></div></div><div class="sect2" title="vector"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"></a>vector</h3></div></div></div><p>
|
</pre></blockquote></div></div></div><div class="section" title="vector"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"/>vector</h3></div></div></div><p>
|
||||||
</p><div class="sect3" title="Space Overhead Management"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"></a>Space Overhead Management</h4></div></div></div><p>
|
</p><div class="section" title="Space Overhead Management"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"/>Space Overhead Management</h4></div></div></div><p>
|
||||||
In <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html" target="_top">this
|
In <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html">this
|
||||||
message to the list</a>, Daniel Kostecky announced work on an
|
message to the list</a>, Daniel Kostecky announced work on an
|
||||||
alternate form of <code class="code">std::vector</code> that would support
|
alternate form of <code class="code">std::vector</code> that would support
|
||||||
hints on the number of elements to be over-allocated. The design
|
hints on the number of elements to be over-allocated. The design
|
||||||
was also described, along with possible implementation choices.
|
was also described, along with possible implementation choices.
|
||||||
</p><p>
|
</p><p>
|
||||||
The first two alpha releases were announced <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html" target="_top">here</a>
|
The first two alpha releases were announced <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html">here</a>
|
||||||
and <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html" target="_top">here</a>.
|
and <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html">here</a>.
|
||||||
</p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Facets </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Associative</td></tr></table></div></body></html>
|
</p></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td align="left" valign="top">Facets </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Associative</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="containers.html" title="Chapter 9. Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="iterators.html" title="Chapter 10. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="containers.html" title="Chapter 9. Containers"/><link rel="prev" href="associative.html" title="Associative"/><link rel="next" href="iterators.html" title="Chapter 10. Iterators"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
|
||||||
Containers
|
Containers
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.c"></a>Interacting with C</h2></div></div></div><div class="sect2" title="Containers vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr/></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers.c"/>Interacting with C</h2></div></div></div><div class="section" title="Containers vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"/>Containers vs. Arrays</h3></div></div></div><p>
|
||||||
You're writing some code and can't decide whether to use builtin
|
You're writing some code and can't decide whether to use builtin
|
||||||
arrays or some kind of container. There are compelling reasons
|
arrays or some kind of container. There are compelling reasons
|
||||||
to use one of the container classes, but you're afraid that
|
to use one of the container classes, but you're afraid that
|
||||||
|
|
@ -84,7 +84,7 @@ template<typename T, unsigned int sz>
|
||||||
inline unsigned int lengthof (T (&)[sz]) { return sz; }
|
inline unsigned int lengthof (T (&)[sz]) { return sz; }
|
||||||
</pre><p>
|
</pre><p>
|
||||||
looks just weird! Hint: unused parameters can be left nameless.
|
looks just weird! Hint: unused parameters can be left nameless.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Associative </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="associative.html">Prev</a> </td><td align="center"><a accesskey="u" href="containers.html">Up</a></td><td align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr><tr><td align="left" valign="top">Associative </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 10.
|
||||||
Iterators
|
Iterators
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , debug " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="bk01pt02.html" title="Part II. Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Debugging Support"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , debug "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_exceptions.html" title="Exceptions"/><link rel="next" href="bk01pt02.html" title="Part II. Standard Contents"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr></table><hr/></div><div class="section" title="Debugging Support"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.debug"/>Debugging Support</h2></div></div></div><p>
|
||||||
There are numerous things that can be done to improve the ease with
|
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
|
which C++ binaries are debugged when using the GNU tool chain. Here
|
||||||
are some of them.
|
are some of them.
|
||||||
</p><div class="sect2" title="Using g++"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"></a>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
|
</p><div class="section" title="Using g++"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"/>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
|
||||||
Compiler flags determine how debug information is transmitted
|
Compiler flags determine how debug information is transmitted
|
||||||
between compilation and debug or analysis tools.
|
between compilation and debug or analysis tools.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -23,15 +23,15 @@
|
||||||
communicate information about source constructs can be changed via
|
communicate information about source constructs can be changed via
|
||||||
<code class="code">-gdwarf-2</code> or <code class="code">-gstabs</code> flags: some debugging
|
<code class="code">-gdwarf-2</code> or <code class="code">-gstabs</code> flags: some debugging
|
||||||
formats permit more expressive type and scope information to be
|
formats permit more expressive type and scope information to be
|
||||||
shown in gdb. Expressiveness can be enhanced by flags like
|
shown in GDB. Expressiveness can be enhanced by flags like
|
||||||
<code class="code">-g3</code>. The default debug information for a particular
|
<code class="code">-g3</code>. The default debug information for a particular
|
||||||
platform can be identified via the value set by the
|
platform can be identified via the value set by the
|
||||||
PREFERRED_DEBUGGING_TYPE macro in the gcc sources.
|
PREFERRED_DEBUGGING_TYPE macro in the gcc sources.
|
||||||
</p><p>
|
</p><p>
|
||||||
Many other options are available: please see <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options" target="_top">"Options
|
Many other options are available: please see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options">"Options
|
||||||
for Debugging Your Program"</a> in Using the GNU Compiler
|
for Debugging Your Program"</a> in Using the GNU Compiler
|
||||||
Collection (GCC) for a complete list.
|
Collection (GCC) for a complete list.
|
||||||
</p></div><div class="sect2" title="Debug Versions of Library Binary Files"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"></a>Debug Versions of Library Binary Files</h3></div></div></div><p>
|
</p></div><div class="section" title="Debug Versions of Library Binary Files"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"/>Debug Versions of Library Binary Files</h3></div></div></div><p>
|
||||||
If you would like debug symbols in libstdc++, there are two ways to
|
If you would like debug symbols in libstdc++, there are two ways to
|
||||||
build libstdc++ with debug flags. The first is to run make from the
|
build libstdc++ with debug flags. The first is to run make from the
|
||||||
toplevel in a freshly-configured tree with
|
toplevel in a freshly-configured tree with
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
</pre><p>
|
</pre><p>
|
||||||
This quick and dirty approach is often sufficient for quick
|
This quick and dirty approach is often sufficient for quick
|
||||||
debugging tasks, when you cannot or don't want to recompile your
|
debugging tasks, when you cannot or don't want to recompile your
|
||||||
application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="sect2" title="Memory Leak Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p>
|
application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="section" title="Memory Leak Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"/>Memory Leak Hunting</h3></div></div></div><p>
|
||||||
There are various third party memory tracing and debug utilities
|
There are various third party memory tracing and debug utilities
|
||||||
that can be used to provide detailed memory allocation information
|
that can be used to provide detailed memory allocation information
|
||||||
about C++ code. An exhaustive list of tools is not going to be
|
about C++ code. An exhaustive list of tools is not going to be
|
||||||
|
|
@ -121,13 +121,50 @@
|
||||||
up the runtime environment, library, and test file, might be:
|
up the runtime environment, library, and test file, might be:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
|
valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
|
||||||
</pre></div><div class="sect2" title="Using gdb"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"></a>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
|
</pre></div><div class="section" title="Data Race Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.races"/>Data Race Hunting</h3></div></div></div><p>
|
||||||
|
All synchronization primitives used in the library internals should be
|
||||||
|
understood by race detectors so that they do not produce false reports.
|
||||||
|
</p><p>
|
||||||
|
We use two annotations (macros) to explain low-level synchronization
|
||||||
|
to race detectors:
|
||||||
|
<code class="code">_GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE()</code> and
|
||||||
|
<code class="code"> _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER()</code>.
|
||||||
|
By default, these two macros are defined empty -- anyone who wants
|
||||||
|
to use a race detector will need to redefine these macros to call an
|
||||||
|
appropriate API.
|
||||||
|
Since these macros are empty by default, redefining them in the user code
|
||||||
|
will affect only the inline template code, e.g. <code class="code">shared_ptr</code>.
|
||||||
|
In order to redefine the macros in <code class="code">basic_string</code> one will
|
||||||
|
need to disable extern templates (by defining
|
||||||
|
<code class="code">_GLIBCXX_EXTERN_TEMPLATE=-1</code>) or rebuild the
|
||||||
|
<code class="code">.so</code> file.
|
||||||
|
The rest of the cases (currently, <code class="code">ios_base::Init::~Init</code>,
|
||||||
|
<code class="code">locale::_Impl</code> and <code class="code">locale::facet</code>) will require
|
||||||
|
to rebuild the <code class="code">.so</code> file.
|
||||||
|
</p><p>
|
||||||
|
The approach described above works at least with the following race
|
||||||
|
detection tools:
|
||||||
|
<a class="link" href="http://valgrind.org/docs/manual/drd-manual.html">
|
||||||
|
DRD </a>,
|
||||||
|
<a class="link" href="http://valgrind.org/docs/manual/hg-manual.html">
|
||||||
|
Helgrind </a>,
|
||||||
|
<a class="link" href="http://code.google.com/p/data-race-test">
|
||||||
|
ThreadSanitizer </a>.
|
||||||
|
</p><p>
|
||||||
|
With DRD, Helgrind and ThreadSanitizer you will need to define
|
||||||
|
the macros like this:
|
||||||
|
</p><pre class="programlisting">
|
||||||
|
#define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) ANNOTATE_HAPPENS_BEFORE(A)
|
||||||
|
#define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A)
|
||||||
|
</pre><p>
|
||||||
|
Refer to the documentation of each particular tool for the details.
|
||||||
|
</p></div><div class="section" title="Using gdb"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"/>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
Many options are available for gdb itself: please see <a class="ulink" href="http://sources.redhat.com/gdb/current/onlinedocs/gdb_13.html#SEC125" target="_top">
|
Many options are available for GDB itself: please see <a class="link" href="http://sources.redhat.com/gdb/current/onlinedocs/gdb/">
|
||||||
"GDB features for C++" </a> in the gdb documentation. Also
|
"GDB features for C++" </a> in the GDB documentation. Also
|
||||||
recommended: the other parts of this manual.
|
recommended: the other parts of this manual.
|
||||||
</p><p>
|
</p><p>
|
||||||
These settings can either be switched on in at the gdb command line,
|
These settings can either be switched on in at the GDB command line,
|
||||||
or put into a .gdbint file to establish default debugging
|
or put into a .gdbint file to establish default debugging
|
||||||
characteristics, like so:
|
characteristics, like so:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
|
|
@ -167,25 +204,25 @@
|
||||||
pretty-printers were not loaded.
|
pretty-printers were not loaded.
|
||||||
</p><p>
|
</p><p>
|
||||||
For additional information on STL support and GDB please visit:
|
For additional information on STL support and GDB please visit:
|
||||||
<a class="ulink" href="http://sourceware.org/gdb/wiki/STLSupport" target="_top"> "GDB Support
|
<a class="link" href="http://sourceware.org/gdb/wiki/STLSupport"> "GDB Support
|
||||||
for STL" </a> in the GDB wiki. Additionally, in-depth
|
for STL" </a> in the GDB wiki. Additionally, in-depth
|
||||||
documentation and discussion of the pretty printing feature can be
|
documentation and discussion of the pretty printing feature can be
|
||||||
found in "Pretty Printing" node in the GDB manual. You can find
|
found in "Pretty Printing" node in the GDB manual. You can find
|
||||||
on-line versions of the GDB user manual in GDB's homepage, at
|
on-line versions of the GDB user manual in GDB's homepage, at
|
||||||
<a class="ulink" href="http://sourceware.org/gdb/" target="_top"> "GDB: The GNU Project
|
<a class="link" href="http://sourceware.org/gdb/"> "GDB: The GNU Project
|
||||||
Debugger" </a>.
|
Debugger" </a>.
|
||||||
</p></div><div class="sect2" title="Tracking uncaught exceptions"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p>
|
</p></div><div class="section" title="Tracking uncaught exceptions"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"/>Tracking uncaught exceptions</h3></div></div></div><p>
|
||||||
The <a class="link" href="termination.html#support.termination.verbose" title="Verbose Terminate Handler">verbose
|
The <a class="link" href="termination.html#support.termination.verbose" title="Verbose Terminate Handler">verbose
|
||||||
termination handler</a> gives information about uncaught
|
termination handler</a> gives information about uncaught
|
||||||
exceptions which are killing the program. It is described in the
|
exceptions which are killing the program. It is described in the
|
||||||
linked-to page.
|
linked-to page.
|
||||||
</p></div><div class="sect2" title="Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
|
</p></div><div class="section" title="Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"/>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
|
||||||
has compile and run-time checks for many containers.
|
has compile and run-time checks for many containers.
|
||||||
</p></div><div class="sect2" title="Compile Time Checking"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
|
</p></div><div class="section" title="Compile Time Checking"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"/>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
|
||||||
Checks</a> Extension has compile-time checks for many algorithms.
|
Checks</a> Extension has compile-time checks for many algorithms.
|
||||||
</p></div><div class="sect2" title="Profile-based Performance Analysis"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
|
</p></div><div class="section" title="Profile-based Performance Analysis"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"/>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
|
||||||
Performance Analysis</a> Extension has performance checks for many
|
Performance Analysis</a> Extension has performance checks for many
|
||||||
algorithms.
|
algorithms.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part II.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr><tr><td align="left" valign="top">Exceptions </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , debug " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="bk01pt03ch17s02.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , debug "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks"/><link rel="next" href="bk01pt03ch17s02.html" title="Semantics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 17. Debug Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="sect1" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.intro"></a>Intro</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 17. Debug Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"/>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode.intro"/>Intro</h2></div></div></div><p>
|
||||||
By default, libstdc++ is built with efficiency in mind, and
|
By default, libstdc++ is built with efficiency in mind, and
|
||||||
therefore performs little or no error checking that is not
|
therefore performs little or no error checking that is not
|
||||||
required by the C++ standard. This means that programs that
|
required by the C++ standard. This means that programs that
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
The libstdc++ debug mode performs checking for many areas of the
|
The libstdc++ debug mode performs checking for many areas of the
|
||||||
C++ standard, but the focus is on checking interactions among
|
C++ standard, but the focus is on checking interactions among
|
||||||
standard iterators, containers, and algorithms, including:
|
standard iterators, containers, and algorithms, including:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Safe iterators</em></span>: Iterators keep track of the
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="emphasis"><em>Safe iterators</em></span>: Iterators keep track of the
|
||||||
container whose elements they reference, so errors such as
|
container whose elements they reference, so errors such as
|
||||||
incrementing a past-the-end iterator or dereferencing an iterator
|
incrementing a past-the-end iterator or dereferencing an iterator
|
||||||
that points to a container that has been destructed are diagnosed
|
that points to a container that has been destructed are diagnosed
|
||||||
|
|
@ -34,4 +34,4 @@
|
||||||
the same predicate that was passed
|
the same predicate that was passed
|
||||||
to <code class="code">set_intersection</code>; the libstdc++ debug mode will
|
to <code class="code">set_intersection</code>; the libstdc++ debug mode will
|
||||||
detect an error if the sequence is not sorted or was sorted by a
|
detect an error if the sequence is not sorted or was sorted by a
|
||||||
different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. Compile Time Checks </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
|
different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 16. Compile Time Checks </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Semantics</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5. Diagnostics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 5. Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="termination.html" title="Termination"/><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5.
|
||||||
Diagnostics
|
Diagnostics
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 5. Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5.
|
</th><td align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 5. Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"/>Chapter 5.
|
||||||
Diagnostics
|
Diagnostics
|
||||||
<a id="id392593" class="indexterm"></a>
|
<a id="id475392" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></div><div class="sect1" title="Exceptions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="sect2" title="API Reference"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></div><div class="section" title="Exceptions"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics.exceptions"/>Exceptions</h2></div></div></div><div class="section" title="API Reference"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"/>API Reference</h3></div></div></div><p>
|
||||||
All exception objects are defined in one of the standard header
|
All exception objects are defined in one of the standard header
|
||||||
files: <code class="filename">exception</code>,
|
files: <code class="filename">exception</code>,
|
||||||
<code class="filename">stdexcept</code>, <code class="filename">new</code>, and
|
<code class="filename">stdexcept</code>, <code class="filename">new</code>, and
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
found in the source documentation.
|
found in the source documentation.
|
||||||
</p><p>
|
</p><p>
|
||||||
Full API details.
|
Full API details.
|
||||||
</p></div><div class="sect2" title="Adding Data to exception"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"></a>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
|
</p></div><div class="section" title="Adding Data to exception"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"/>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
|
||||||
The standard exception classes carry with them a single string as
|
The standard exception classes carry with them a single string as
|
||||||
data (usually describing what went wrong or where the 'throw' took
|
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
|
place). It's good to remember that you can add your own data to
|
||||||
|
|
@ -40,4 +40,4 @@
|
||||||
int e;
|
int e;
|
||||||
DBID id; // some user-defined type
|
DBID id; // some user-defined type
|
||||||
};
|
};
|
||||||
</pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Termination </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
|
</pre></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td align="left" valign="top">Termination </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,442 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"/><link rel="prev" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"/><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
||||||
|
Porting and Maintenance
|
||||||
|
|
||||||
|
</th><td align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr/></div><div class="section" title="Writing and Generating Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.doc"/>Writing and Generating Documentation</h2></div></div></div><div class="section" title="Introduction"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"/>Introduction</h3></div></div></div><p>
|
||||||
|
Documentation for the GNU C++ Library is created from three
|
||||||
|
independent sources: a manual, a FAQ, and an API reference.
|
||||||
|
</p><p>
|
||||||
|
The sub-directory <code class="filename">doc</code>
|
||||||
|
within the main source directory contains
|
||||||
|
<code class="filename">Makefile.am</code> and
|
||||||
|
<code class="filename">Makefile.in</code>, which provide rules for
|
||||||
|
generating documentation, described in excruciating detail
|
||||||
|
below. The <code class="filename">doc</code>
|
||||||
|
sub-directory also contains three directories: <code class="filename">doxygen</code>, which contains scripts and
|
||||||
|
fragments for <span class="command"><strong>doxygen</strong></span>, <code class="filename">html</code>, which contains an html
|
||||||
|
version of the manual, and <code class="filename">xml</code>, which contains an xml version
|
||||||
|
of the manual.
|
||||||
|
</p><p>
|
||||||
|
Diverging from established documentation conventions in the rest
|
||||||
|
of the GCC project, libstdc++ does not use Texinfo as a markup
|
||||||
|
language. Instead, Docbook is used to create the manual and the
|
||||||
|
FAQ, and Doxygen is used to construct the API
|
||||||
|
reference. Although divergent, this conforms to the GNU Project
|
||||||
|
recommendations as long as the output is of sufficient quality,
|
||||||
|
as per
|
||||||
|
<a class="link" href="http://www.gnu.org/prep/standards/standards.html#Documentation">
|
||||||
|
GNU Manuals</a>.
|
||||||
|
</p></div><div class="section" title="Generating Documentation"><div class="titlepage"><div><div><h3 class="title"><a id="doc.generation"/>Generating Documentation</h3></div></div></div><p>
|
||||||
|
Certain Makefile rules are required by the GNU Coding
|
||||||
|
Standards. These standard rules generate HTML, PDF, XML, or man
|
||||||
|
files. For each of the generative rules, there is an additional
|
||||||
|
install rule that is used to install any generated documentation
|
||||||
|
files into the prescribed installation directory. Files are
|
||||||
|
installed into <code class="filename">share/doc</code>
|
||||||
|
or <code class="filename">share/man</code> directories.
|
||||||
|
</p><p>
|
||||||
|
The standard Makefile rules are conditionally supported, based
|
||||||
|
on the results of examining the host environment for
|
||||||
|
prerequisites at configuration time. If requirements are not
|
||||||
|
found, the rule is aliased to a dummy rule that does nothing,
|
||||||
|
and produces no documentation. If the requirements are found,
|
||||||
|
the rule forwards to a private rule that produces the requested
|
||||||
|
documentation.
|
||||||
|
</p><p>
|
||||||
|
For more details on what prerequisites were found and where,
|
||||||
|
please consult the file <code class="filename">config.log</code> in the
|
||||||
|
libstdc++ build directory. Compare this log to what is expected
|
||||||
|
for the relevant Makefile conditionals:
|
||||||
|
<code class="literal">BUILD_INFO</code>, <code class="literal">BUILD_XML</code>,
|
||||||
|
<code class="literal">BUILD_HTML</code>, <code class="literal">BUILD_MAN</code>,
|
||||||
|
<code class="literal">BUILD_PDF</code>, and <code class="literal">BUILD_EPUB</code>.
|
||||||
|
</p><p>
|
||||||
|
Supported Makefile rules:
|
||||||
|
</p><div class="variablelist"><dl><dt><span class="term">
|
||||||
|
<span class="emphasis"><em>make html</em></span>
|
||||||
|
, </span><span class="term">
|
||||||
|
<span class="emphasis"><em>make install-html</em></span>
|
||||||
|
</span></dt><dd><p>
|
||||||
|
Generates multi-page HTML documentation, and installs it
|
||||||
|
in the following directories:
|
||||||
|
</p><p>
|
||||||
|
<code class="filename">
|
||||||
|
doc/libstdc++/libstdc++-api.html
|
||||||
|
</code>
|
||||||
|
</p><p>
|
||||||
|
<code class="filename">
|
||||||
|
doc/libstdc++/libstdc++-manual.html
|
||||||
|
</code>
|
||||||
|
</p></dd><dt><span class="term">
|
||||||
|
<span class="emphasis"><em>make pdf</em></span>
|
||||||
|
, </span><span class="term">
|
||||||
|
<span class="emphasis"><em>make install-pdf</em></span>
|
||||||
|
</span></dt><dd><p>
|
||||||
|
Generates indexed PDF documentation, and installs it as
|
||||||
|
the following files:
|
||||||
|
</p><p>
|
||||||
|
<code class="filename">doc/libstdc++/libstdc++-api.pdf</code>
|
||||||
|
</p><p>
|
||||||
|
<code class="filename">doc/libstdc++/libstdc++-manual.pdf</code>
|
||||||
|
</p></dd><dt><span class="term">
|
||||||
|
<span class="emphasis"><em>make man</em></span>
|
||||||
|
, </span><span class="term">
|
||||||
|
<span class="emphasis"><em>make install-man</em></span>
|
||||||
|
</span></dt><dd><p>
|
||||||
|
Generates man pages, and installs it in the following directory:
|
||||||
|
</p><p>
|
||||||
|
<code class="filename">man/man3/</code>
|
||||||
|
</p><p>
|
||||||
|
The generated man pages are namespace-qualified, so to look at
|
||||||
|
the man page for <code class="classname">vector</code>, one would use
|
||||||
|
<span class="command"><strong>man std::vector</strong></span>.
|
||||||
|
</p></dd><dt><span class="term">
|
||||||
|
<span class="emphasis"><em>make epub</em></span>
|
||||||
|
, </span><span class="term">
|
||||||
|
<span class="emphasis"><em>make install-epub</em></span>
|
||||||
|
</span></dt><dd><p>
|
||||||
|
Generates documentation in the ebook/portable electronic
|
||||||
|
reader format called Epub, and installs it as the
|
||||||
|
following file.
|
||||||
|
</p><p>
|
||||||
|
<code class="filename">doc/libstdc++/libstdc++-manual.epub</code>
|
||||||
|
</p></dd><dt><span class="term">
|
||||||
|
<span class="emphasis"><em>make xml</em></span>
|
||||||
|
, </span><span class="term">
|
||||||
|
<span class="emphasis"><em>make install-xml</em></span>
|
||||||
|
</span></dt><dd><p>
|
||||||
|
Generates single-file XML documentation, and installs it
|
||||||
|
as the following files:
|
||||||
|
</p><p>
|
||||||
|
<code class="filename">doc/libstdc++/libstdc++-api-single.xml</code>
|
||||||
|
</p><p>
|
||||||
|
<code class="filename">doc/libstdc++/libstdc++-manual-single.xml</code>
|
||||||
|
</p></dd></dl></div><p>
|
||||||
|
Makefile rules for several other formats are explicitly not
|
||||||
|
supported, and are always aliased to dummy rules. These
|
||||||
|
unsupported formats are: <span class="emphasis"><em>info</em></span>,
|
||||||
|
<span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
|
||||||
|
</p></div><div class="section" title="Doxygen"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"/>Doxygen</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"/>Prerequisites</h4></div></div></div><div class="table"><a id="id498113"/><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col style="text-align: center" class="c1"/><col style="text-align: center" class="c2"/><col style="text-align: center" class="c3"/></colgroup><thead><tr><th style="text-align: center">Tool</th><th style="text-align: center">Version</th><th style="text-align: center">Required By</th></tr></thead><tbody><tr><td style="text-align: center">coreutils</td><td style="text-align: center">8.5</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">bash</td><td style="text-align: center">4.1</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">doxygen</td><td style="text-align: center">1.7.0</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">graphviz</td><td style="text-align: center">2.26</td><td style="text-align: center">graphical hierarchies</td></tr><tr><td style="text-align: center">pdflatex</td><td style="text-align: center">2007-59</td><td style="text-align: center">pdf output</td></tr></tbody></table></div></div><br class="table-break"/><p>
|
||||||
|
Prerequisite tools are Bash 2.0 or later,
|
||||||
|
<a class="link" href="http://www.doxygen.org/">Doxygen</a>, and
|
||||||
|
the <a class="link" href="http://www.gnu.org/software/coreutils/">GNU
|
||||||
|
coreutils</a>. (GNU versions of find, xargs, and possibly
|
||||||
|
sed and grep are used, just because the GNU versions make
|
||||||
|
things very easy.)
|
||||||
|
</p><p>
|
||||||
|
To generate the pretty pictures and hierarchy
|
||||||
|
graphs, the
|
||||||
|
<a class="link" href="http://www.graphviz.org">Graphviz</a> package
|
||||||
|
will need to be installed. For PDF
|
||||||
|
output, <a class="link" href="http://www.tug.org/applications/pdftex/">
|
||||||
|
pdflatex</a> is required.
|
||||||
|
</p></div><div class="section" title="Generating the Doxygen Files"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"/>Generating the Doxygen Files</h4></div></div></div><p>
|
||||||
|
The following Makefile rules run Doxygen to generate HTML
|
||||||
|
docs, XML docs, XML docs as a single file, PDF docs, and the
|
||||||
|
man pages. These rules are not conditional! If the required
|
||||||
|
tools are not found, or are the wrong versions, the rule may
|
||||||
|
end in an error.
|
||||||
|
</p><p>
|
||||||
|
</p><pre class="screen"><strong class="userinput"><code>make doc-html-doxygen</code></strong></pre><p>
|
||||||
|
</p><p>
|
||||||
|
</p><pre class="screen"><strong class="userinput"><code>make doc-xml-doxygen</code></strong></pre><p>
|
||||||
|
</p><p>
|
||||||
|
</p><pre class="screen"><strong class="userinput"><code>make doc-xml-single-doxygen</code></strong></pre><p>
|
||||||
|
</p><p>
|
||||||
|
</p><pre class="screen"><strong class="userinput"><code>make doc-pdf-doxygen</code></strong></pre><p>
|
||||||
|
</p><p>
|
||||||
|
</p><pre class="screen"><strong class="userinput"><code>make doc-man-doxygen</code></strong></pre><p>
|
||||||
|
</p><p>
|
||||||
|
Generated files are output into separate sub directories of
|
||||||
|
<code class="filename">doc/doxygen/</code> in the
|
||||||
|
build directory, based on the output format. For instance, the
|
||||||
|
HTML docs will be in <code class="filename">doc/doxygen/html</code>.
|
||||||
|
</p><p>
|
||||||
|
Careful observers will see that the Makefile rules simply call
|
||||||
|
a script from the source tree, <code class="filename">run_doxygen</code>, which
|
||||||
|
does the actual work of running Doxygen and then (most
|
||||||
|
importantly) massaging the output files. If for some reason
|
||||||
|
you prefer to not go through the Makefile, you can call this
|
||||||
|
script directly. (Start by passing <code class="literal">--help</code>.)
|
||||||
|
</p><p>
|
||||||
|
If you wish to tweak the Doxygen settings, do so by editing
|
||||||
|
<code class="filename">doc/doxygen/user.cfg.in</code>. Notes to fellow
|
||||||
|
library hackers are written in triple-# comments.
|
||||||
|
</p></div><div class="section" title="Markup"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.markup"/>Markup</h4></div></div></div><p>
|
||||||
|
In general, libstdc++ files should be formatted according to
|
||||||
|
the rules found in the
|
||||||
|
<a class="link" href="source_code_style.html" title="Coding Style">Coding Standard</a>. Before
|
||||||
|
any doxygen-specific formatting tweaks are made, please try to
|
||||||
|
make sure that the initial formatting is sound.
|
||||||
|
</p><p>
|
||||||
|
Adding Doxygen markup to a file (informally called
|
||||||
|
<span class="quote">“<span class="quote">doxygenating</span>”</span>) is very simple. The Doxygen manual can be
|
||||||
|
found
|
||||||
|
<a class="link" href="http://www.stack.nl/~dimitri/doxygen/download.html#latestman">here</a>.
|
||||||
|
We try to use a very-recent version of Doxygen.
|
||||||
|
</p><p>
|
||||||
|
For classes, use
|
||||||
|
<code class="classname">deque</code>/<code class="classname">vector</code>/<code class="classname">list</code>
|
||||||
|
and <code class="classname">std::pair</code> as examples. For
|
||||||
|
functions, see their member functions, and the free functions
|
||||||
|
in <code class="filename">stl_algobase.h</code>. Member functions of
|
||||||
|
other container-like types should read similarly to these
|
||||||
|
member functions.
|
||||||
|
</p><p>
|
||||||
|
Some commentary to accompany
|
||||||
|
the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html">Special
|
||||||
|
Documentation Blocks</a> section of
|
||||||
|
the Doxygen manual:
|
||||||
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>For longer comments, use the Javadoc style...</p></li><li class="listitem"><p>
|
||||||
|
...not the Qt style. The intermediate *'s are preferred.
|
||||||
|
</p></li><li class="listitem"><p>
|
||||||
|
Use the triple-slash style only for one-line comments (the
|
||||||
|
<span class="quote">“<span class="quote">brief</span>”</span> mode).
|
||||||
|
</p></li><li class="listitem"><p>
|
||||||
|
This is disgusting. Don't do this.
|
||||||
|
</p></li></ol></div><p>
|
||||||
|
Some specific guidelines:
|
||||||
|
</p><p>
|
||||||
|
Use the @-style of commands, not the !-style. Please be
|
||||||
|
careful about whitespace in your markup comments. Most of the
|
||||||
|
time it doesn't matter; doxygen absorbs most whitespace, and
|
||||||
|
both HTML and *roff are agnostic about whitespace. However,
|
||||||
|
in <pre> blocks and @code/@endcode sections, spacing can
|
||||||
|
have <span class="quote">“<span class="quote">interesting</span>”</span> effects.
|
||||||
|
</p><p>
|
||||||
|
Use either kind of grouping, as
|
||||||
|
appropriate. <code class="filename">doxygroups.cc</code> exists for this
|
||||||
|
purpose. See <code class="filename">stl_iterator.h</code> for a good example
|
||||||
|
of the <span class="quote">“<span class="quote">other</span>”</span> kind of grouping.
|
||||||
|
</p><p>
|
||||||
|
Please use markup tags like @p and @a when referring to things
|
||||||
|
such as the names of function parameters. Use @e for emphasis
|
||||||
|
when necessary. Use @c to refer to other standard names.
|
||||||
|
(Examples of all these abound in the present code.)
|
||||||
|
</p><p>
|
||||||
|
Complicated math functions should use the multi-line
|
||||||
|
format. An example from <code class="filename">random.h</code>:
|
||||||
|
</p><p>
|
||||||
|
</p><div class="literallayout"><p><br/>
|
||||||
|
/**<br/>
|
||||||
|
* @brief A model of a linear congruential random number generator.<br/>
|
||||||
|
*<br/>
|
||||||
|
* @f[<br/>
|
||||||
|
* x_{i+1}\leftarrow(ax_{i} + c) \bmod m<br/>
|
||||||
|
* @f]<br/>
|
||||||
|
*/<br/>
|
||||||
|
</p></div><p>
|
||||||
|
</p><p>
|
||||||
|
One area of note is the markup required for
|
||||||
|
<code class="literal">@file</code> markup in header files. Two details
|
||||||
|
are important: for filenames that have the same name in
|
||||||
|
multiple directories, include part of the installed path to
|
||||||
|
disambiguate. For example:
|
||||||
|
</p><p>
|
||||||
|
</p><div class="literallayout"><p><br/>
|
||||||
|
/** @file debug/vector<br/>
|
||||||
|
* This file is a GNU debug extension to the Standard C++ Library.<br/>
|
||||||
|
*/<br/>
|
||||||
|
</p></div><p>
|
||||||
|
</p><p>
|
||||||
|
The other relevant detail for header files is the use of a
|
||||||
|
libstdc++-specific doxygen alias that helps distinguish
|
||||||
|
between public header files (like <code class="filename">random</code>)
|
||||||
|
from implementation or private header files (like
|
||||||
|
<code class="filename">bits/c++config.h</code>.) This alias is spelled
|
||||||
|
<code class="literal">@headername</code> and can take one or two
|
||||||
|
arguments that detail the public header file or files that
|
||||||
|
should be included to use the contents of the file. All header
|
||||||
|
files that are not intended for direct inclusion must use
|
||||||
|
<code class="literal">headername</code> in the <code class="literal">file</code>
|
||||||
|
block. An example:
|
||||||
|
</p><p>
|
||||||
|
</p><div class="literallayout"><p><br/>
|
||||||
|
/** @file bits/basic_string.h<br/>
|
||||||
|
* This is an internal header file, included by other library headers.<br/>
|
||||||
|
* Do not attempt to use it directly. @headername{string}<br/>
|
||||||
|
*/<br/>
|
||||||
|
</p></div><p>
|
||||||
|
</p><p>
|
||||||
|
Be careful about using certain, special characters when
|
||||||
|
writing Doxygen comments. Single and double quotes, and
|
||||||
|
separators in filenames are two common trouble spots. When in
|
||||||
|
doubt, consult the following table.
|
||||||
|
</p><div class="table"><a id="id498615"/><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">HTML</th><th style="text-align: left">Doxygen</th></tr></thead><tbody><tr><td style="text-align: left">\</td><td style="text-align: left">\\</td></tr><tr><td style="text-align: left">"</td><td style="text-align: left">\"</td></tr><tr><td style="text-align: left">'</td><td style="text-align: left">\'</td></tr><tr><td style="text-align: left"><i></td><td style="text-align: left">@a word</td></tr><tr><td style="text-align: left"><b></td><td style="text-align: left">@b word</td></tr><tr><td style="text-align: left"><code></td><td style="text-align: left">@c word</td></tr><tr><td style="text-align: left"><em></td><td style="text-align: left">@a word</td></tr><tr><td style="text-align: left"><em></td><td style="text-align: left"><em>two words or more</em></td></tr></tbody></table></div></div><br class="table-break"/></div></div><div class="section" title="Docbook"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"/>Docbook</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"/>Prerequisites</h4></div></div></div><div class="table"><a id="id498777"/><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col style="text-align: center" class="c1"/><col style="text-align: center" class="c2"/><col style="text-align: center" class="c3"/></colgroup><thead><tr><th style="text-align: center">Tool</th><th style="text-align: center">Version</th><th style="text-align: center">Required By</th></tr></thead><tbody><tr><td style="text-align: center">docbook5-style-xsl</td><td style="text-align: center">1.76.1</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">xsltproc</td><td style="text-align: center">1.1.26</td><td style="text-align: center">all</td></tr><tr><td style="text-align: center">xmllint</td><td style="text-align: center">2.7.7</td><td style="text-align: center">validation</td></tr><tr><td style="text-align: center">dblatex</td><td style="text-align: center">0.3</td><td style="text-align: center">pdf output</td></tr><tr><td style="text-align: center">pdflatex</td><td style="text-align: center">2007-59</td><td style="text-align: center">pdf output</td></tr><tr><td style="text-align: center">docbook2X</td><td style="text-align: center">0.8.8</td><td style="text-align: center">info output</td></tr></tbody></table></div></div><br class="table-break"/><p>
|
||||||
|
Editing the DocBook sources requires an XML editor. Many
|
||||||
|
exist: some notable options
|
||||||
|
include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
|
||||||
|
or <span class="application">Conglomerate</span>.
|
||||||
|
</p><p>
|
||||||
|
Some editors support special <span class="quote">“<span class="quote">XML Validation</span>”</span>
|
||||||
|
modes that can validate the file as it is
|
||||||
|
produced. Recommended is the <span class="command"><strong>nXML Mode</strong></span>
|
||||||
|
for <span class="command"><strong>emacs</strong></span>.
|
||||||
|
</p><p>
|
||||||
|
Besides an editor, additional DocBook files and XML tools are
|
||||||
|
also required.
|
||||||
|
</p><p>
|
||||||
|
Access to the DocBook 5.0 stylesheets and schema is required. The
|
||||||
|
stylesheets are usually packaged by vendor, in something
|
||||||
|
like <code class="filename">docbook5-style-xsl</code>. To exactly match
|
||||||
|
generated output, please use a version of the stylesheets
|
||||||
|
equivalent
|
||||||
|
to <code class="filename">docbook5-style-xsl-1.75.2-3</code>. The
|
||||||
|
installation directory for this package corresponds to
|
||||||
|
the <code class="literal">XSL_STYLE_DIR</code>
|
||||||
|
in <code class="filename">doc/Makefile.am</code> and defaults
|
||||||
|
to <code class="filename">/usr/share/sgml/docbook/xsl-ns-stylesheets</code>.
|
||||||
|
</p><p>
|
||||||
|
For processing XML, an XML processor and some style
|
||||||
|
sheets are necessary. Defaults are <span class="command"><strong>xsltproc</strong></span>
|
||||||
|
provided by <code class="filename">libxslt</code>.
|
||||||
|
</p><p>
|
||||||
|
For validating the XML document, you'll need
|
||||||
|
something like <span class="command"><strong>xmllint</strong></span> and access to the
|
||||||
|
relevant DocBook schema. These are provided
|
||||||
|
by a vendor package like <code class="filename">libxml2</code> and <code class="filename">docbook5-schemas-5.0-4</code>
|
||||||
|
</p><p>
|
||||||
|
For PDF output, something that transforms valid Docbook XML to PDF is
|
||||||
|
required. Possible solutions include <a class="link" href="http://dblatex.sourceforge.net">dblatex</a>,
|
||||||
|
<span class="command"><strong>xmlto</strong></span>, or <span class="command"><strong>prince</strong></span>. Of
|
||||||
|
these, <span class="command"><strong>dblatex</strong></span> is the default. Other
|
||||||
|
options are listed on the DocBook web <a class="link" href="http://wiki.docbook.org/topic/DocBookPublishingTools">pages</a>. Please
|
||||||
|
consult the <code class="email"><<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>></code> list when
|
||||||
|
preparing printed manuals for current best practice and
|
||||||
|
suggestions.
|
||||||
|
</p><p>
|
||||||
|
For Texinfo output, something that transforms valid Docbook
|
||||||
|
XML to Texinfo is required. The default choice is <a class="link" href="http://docbook2x.sourceforge.net/">docbook2X</a>.
|
||||||
|
</p></div><div class="section" title="Generating the DocBook Files"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"/>Generating the DocBook Files</h4></div></div></div><p>
|
||||||
|
The following Makefile rules generate (in order): an HTML
|
||||||
|
version of all the DocBook documentation, a PDF version of the
|
||||||
|
same, and a single XML document. These rules are not
|
||||||
|
conditional! If the required tools are not found, or are the
|
||||||
|
wrong versions, the rule may end in an error.
|
||||||
|
</p><p>
|
||||||
|
</p><pre class="screen"><strong class="userinput"><code>make doc-html-docbook</code></strong></pre><p>
|
||||||
|
</p><p>
|
||||||
|
</p><pre class="screen"><strong class="userinput"><code>make doc-pdf-docbook</code></strong></pre><p>
|
||||||
|
</p><p>
|
||||||
|
</p><pre class="screen"><strong class="userinput"><code>make doc-xml-single-docbook</code></strong></pre><p>
|
||||||
|
</p><p>
|
||||||
|
Generated files are output into separate sub directores of
|
||||||
|
<code class="filename">doc/docbook/</code> in the
|
||||||
|
build directory, based on the output format. For instance, the
|
||||||
|
HTML docs will be in <code class="filename">doc/docbook/html</code>.
|
||||||
|
</p><p>
|
||||||
|
If the Docbook stylesheets are installed in a custom location,
|
||||||
|
one can use the variable <code class="literal">XSL_STYLE_DIR</code> to
|
||||||
|
over-ride the Makefile defaults. As so:
|
||||||
|
</p><pre class="screen">
|
||||||
|
<strong class="userinput"><code>
|
||||||
|
make <code class="literal">XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwalsh"</code> doc-html-docbook
|
||||||
|
</code></strong>
|
||||||
|
</pre></div><div class="section" title="Editing and Validation"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.validation"/>Editing and Validation</h4></div></div></div><p>
|
||||||
|
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:
|
||||||
|
</p><pre class="screen">
|
||||||
|
<strong class="userinput"><code>make doc-xml-validate-docbook</code></strong>
|
||||||
|
</pre><p>
|
||||||
|
This is equivalent to doing:
|
||||||
|
</p><pre class="screen">
|
||||||
|
<strong class="userinput"><code>
|
||||||
|
xmllint --noout --valid <code class="filename">xml/index.xml</code>
|
||||||
|
</code></strong>
|
||||||
|
</pre><p>
|
||||||
|
Please note that individual sections and chapters of the
|
||||||
|
manual can be validated by substiuting the file desired for
|
||||||
|
<code class="filename">xml/index.xml</code> in the command
|
||||||
|
above. Reducing scope in this manner can be helpful when
|
||||||
|
validation on the entire manual fails.
|
||||||
|
</p><p>
|
||||||
|
All Docbook xml sources should always validate. No excuses!
|
||||||
|
</p></div><div class="section" title="File Organization and Basics"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"/>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br/>
|
||||||
|
<span class="emphasis"><em>Which files are important</em></span><br/>
|
||||||
|
<br/>
|
||||||
|
All Docbook files are in the directory<br/>
|
||||||
|
libstdc++-v3/doc/xml<br/>
|
||||||
|
<br/>
|
||||||
|
Inside this directory, the files of importance:<br/>
|
||||||
|
spine.xml - index to documentation set<br/>
|
||||||
|
manual/spine.xml - index to manual<br/>
|
||||||
|
manual/*.xml - individual chapters and sections of the manual<br/>
|
||||||
|
faq.xml - index to FAQ<br/>
|
||||||
|
api.xml - index to source level / API<br/>
|
||||||
|
<br/>
|
||||||
|
All *.txml files are template xml files, i.e., otherwise empty files with<br/>
|
||||||
|
the correct structure, suitable for filling in with new information.<br/>
|
||||||
|
<br/>
|
||||||
|
<span class="emphasis"><em>Canonical Writing Style</em></span><br/>
|
||||||
|
<br/>
|
||||||
|
class template<br/>
|
||||||
|
function template<br/>
|
||||||
|
member function template<br/>
|
||||||
|
(via C++ Templates, Vandevoorde)<br/>
|
||||||
|
<br/>
|
||||||
|
class in namespace std: allocator, not std::allocator<br/>
|
||||||
|
<br/>
|
||||||
|
header file: iostream, not <iostream><br/>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<span class="emphasis"><em>General structure</em></span><br/>
|
||||||
|
<br/>
|
||||||
|
<set><br/>
|
||||||
|
<book><br/>
|
||||||
|
</book><br/>
|
||||||
|
<br/>
|
||||||
|
<book><br/>
|
||||||
|
<chapter><br/>
|
||||||
|
</chapter><br/>
|
||||||
|
</book><br/>
|
||||||
|
<br/>
|
||||||
|
<book><br/>
|
||||||
|
<part><br/>
|
||||||
|
<chapter><br/>
|
||||||
|
<section><br/>
|
||||||
|
</section><br/>
|
||||||
|
<br/>
|
||||||
|
<sect1><br/>
|
||||||
|
</sect1><br/>
|
||||||
|
<br/>
|
||||||
|
<sect1><br/>
|
||||||
|
<sect2><br/>
|
||||||
|
</sect2><br/>
|
||||||
|
</sect1><br/>
|
||||||
|
</chapter><br/>
|
||||||
|
<br/>
|
||||||
|
<chapter><br/>
|
||||||
|
</chapter><br/>
|
||||||
|
</part><br/>
|
||||||
|
</book><br/>
|
||||||
|
<br/>
|
||||||
|
</set><br/>
|
||||||
|
</p></div></div><div class="section" title="Markup By Example"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"/>Markup By Example</h4></div></div></div><p>
|
||||||
|
Complete details on Docbook markup can be found in the DocBook
|
||||||
|
Element Reference,
|
||||||
|
<a class="link" href="http://www.docbook.org/tdg/en/html/part2.html">online</a>.
|
||||||
|
An incomplete reference for HTML to Docbook conversion is
|
||||||
|
detailed in the table below.
|
||||||
|
</p><div class="table"><a id="id499254"/><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">HTML</th><th style="text-align: left">Docbook</th></tr></thead><tbody><tr><td style="text-align: left"><p></td><td style="text-align: left"><para></td></tr><tr><td style="text-align: left"><pre></td><td style="text-align: left"><computeroutput>, <programlisting>,
|
||||||
|
<literallayout></td></tr><tr><td style="text-align: left"><ul></td><td style="text-align: left"><itemizedlist></td></tr><tr><td style="text-align: left"><ol></td><td style="text-align: left"><orderedlist></td></tr><tr><td style="text-align: left"><il></td><td style="text-align: left"><listitem></td></tr><tr><td style="text-align: left"><dl></td><td style="text-align: left"><variablelist></td></tr><tr><td style="text-align: left"><dt></td><td style="text-align: left"><term></td></tr><tr><td style="text-align: left"><dd></td><td style="text-align: left"><listitem></td></tr><tr><td style="text-align: left"><a href=""></td><td style="text-align: left"><ulink url=""></td></tr><tr><td style="text-align: left"><code></td><td style="text-align: left"><literal>, <programlisting></td></tr><tr><td style="text-align: left"><strong></td><td style="text-align: left"><emphasis></td></tr><tr><td style="text-align: left"><em></td><td style="text-align: left"><emphasis></td></tr><tr><td style="text-align: left">"</td><td style="text-align: left"><quote></td></tr></tbody></table></div></div><br class="table-break"/><p>
|
||||||
|
And examples of detailed markup for which there are no real HTML
|
||||||
|
equivalents are listed in the table below.
|
||||||
|
</p><div class="table"><a id="id499455"/><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">Element</th><th style="text-align: left">Use</th></tr></thead><tbody><tr><td style="text-align: left"><structname></td><td style="text-align: left"><structname>char_traits</structname></td></tr><tr><td style="text-align: left"><classname></td><td style="text-align: left"><classname>string</classname></td></tr><tr><td style="text-align: left"><function></td><td style="text-align: left">
|
||||||
|
<p><function>clear()</function></p>
|
||||||
|
<p><function>fs.clear()</function></p>
|
||||||
|
</td></tr><tr><td style="text-align: left"><type></td><td style="text-align: left"><type>long long</type></td></tr><tr><td style="text-align: left"><varname></td><td style="text-align: left"><varname>fs</varname></td></tr><tr><td style="text-align: left"><literal></td><td style="text-align: left">
|
||||||
|
<p><literal>-Weffc++</literal></p>
|
||||||
|
<p><literal>rel_ops</literal></p>
|
||||||
|
</td></tr><tr><td style="text-align: left"><constant></td><td style="text-align: left">
|
||||||
|
<p><constant>_GNU_SOURCE</constant></p>
|
||||||
|
<p><constant>3.0</constant></p>
|
||||||
|
</td></tr><tr><td style="text-align: left"><command></td><td style="text-align: left"><command>g++</command></td></tr><tr><td style="text-align: left"><errortext></td><td style="text-align: left"><errortext>In instantiation of</errortext></td></tr><tr><td style="text-align: left"><filename></td><td style="text-align: left">
|
||||||
|
<p><filename class="headerfile">ctype.h</filename></p>
|
||||||
|
<p><filename class="directory">/home/gcc/build</filename></p>
|
||||||
|
<p><filename class="libraryfile">libstdc++.so</filename></p>
|
||||||
|
</td></tr></tbody></table></div></div><br class="table-break"/></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr><tr><td align="left" valign="top">Appendix B.
|
||||||
|
Porting and Maintenance
|
||||||
|
|
||||||
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
|
||||||
|
|
@ -1,267 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Documentation Style</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Documentation Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A.
|
|
||||||
Contributing
|
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Documentation Style"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.doc_style"></a>Documentation Style</h2></div></div></div><div class="sect2" title="Doxygen"><div class="titlepage"><div><div><h3 class="title"><a id="doc_style.doxygen"></a>Doxygen</h3></div></div></div><div class="sect3" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><p>
|
|
||||||
Prerequisite tools are Bash 2.0 or later,
|
|
||||||
<a class="ulink" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
|
|
||||||
the <a class="ulink" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
|
|
||||||
coreutils</a>. (GNU versions of find, xargs, and possibly
|
|
||||||
sed and grep are used, just because the GNU versions make
|
|
||||||
things very easy.)
|
|
||||||
</p><p>
|
|
||||||
To generate the pretty pictures and hierarchy
|
|
||||||
graphs, the
|
|
||||||
<a class="ulink" href="http://www.graphviz.org" target="_top">Graphviz</a> package
|
|
||||||
will need to be installed. For PDF
|
|
||||||
output, <a class="ulink" href="http://www.tug.org/applications/pdftex/" target="_top">
|
|
||||||
pdflatex</a> is required.
|
|
||||||
</p></div><div class="sect3" title="Generating the Doxygen Files"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"></a>Generating the Doxygen Files</h4></div></div></div><p>
|
|
||||||
The following Makefile rules run Doxygen to generate HTML
|
|
||||||
docs, XML docs, PDF docs, and the man pages.
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-html-doxygen</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-xml-doxygen</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-pdf-doxygen</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-man-doxygen</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
Careful observers will see that the Makefile rules simply call
|
|
||||||
a script from the source tree, <code class="filename">run_doxygen</code>, which
|
|
||||||
does the actual work of running Doxygen and then (most
|
|
||||||
importantly) massaging the output files. If for some reason
|
|
||||||
you prefer to not go through the Makefile, you can call this
|
|
||||||
script directly. (Start by passing <code class="literal">--help</code>.)
|
|
||||||
</p><p>
|
|
||||||
If you wish to tweak the Doxygen settings, do so by editing
|
|
||||||
<code class="filename">doc/doxygen/user.cfg.in</code>. Notes to fellow
|
|
||||||
library hackers are written in triple-# comments.
|
|
||||||
</p></div><div class="sect3" title="Markup"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.markup"></a>Markup</h4></div></div></div><p>
|
|
||||||
In general, libstdc++ files should be formatted according to
|
|
||||||
the rules found in the
|
|
||||||
<a class="link" href="source_code_style.html" title="Coding Style">Coding Standard</a>. Before
|
|
||||||
any doxygen-specific formatting tweaks are made, please try to
|
|
||||||
make sure that the initial formatting is sound.
|
|
||||||
</p><p>
|
|
||||||
Adding Doxygen markup to a file (informally called
|
|
||||||
<span class="quote">“<span class="quote">doxygenating</span>”</span>) is very simple. The Doxygen manual can be
|
|
||||||
found
|
|
||||||
<a class="ulink" href="http://www.stack.nl/~dimitri/doxygen/download.html#latestman" target="_top">here</a>.
|
|
||||||
We try to use a very-recent version of Doxygen.
|
|
||||||
</p><p>
|
|
||||||
For classes, use
|
|
||||||
<code class="classname">deque</code>/<code class="classname">vector</code>/<code class="classname">list</code>
|
|
||||||
and <code class="classname">std::pair</code> as examples. For
|
|
||||||
functions, see their member functions, and the free functions
|
|
||||||
in <code class="filename">stl_algobase.h</code>. Member functions of
|
|
||||||
other container-like types should read similarly to these
|
|
||||||
member functions.
|
|
||||||
</p><p>
|
|
||||||
Some commentary to accompany
|
|
||||||
the first list in the <a class="ulink" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
|
|
||||||
Documentation Blocks</a> section of
|
|
||||||
the Doxygen manual:
|
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>For longer comments, use the Javadoc style...</p></li><li class="listitem"><p>
|
|
||||||
...not the Qt style. The intermediate *'s are preferred.
|
|
||||||
</p></li><li class="listitem"><p>
|
|
||||||
Use the triple-slash style only for one-line comments (the
|
|
||||||
<span class="quote">“<span class="quote">brief</span>”</span> mode).
|
|
||||||
</p></li><li class="listitem"><p>
|
|
||||||
This is disgusting. Don't do this.
|
|
||||||
</p></li></ol></div><p>
|
|
||||||
Some specific guidelines:
|
|
||||||
</p><p>
|
|
||||||
Use the @-style of commands, not the !-style. Please be
|
|
||||||
careful about whitespace in your markup comments. Most of the
|
|
||||||
time it doesn't matter; doxygen absorbs most whitespace, and
|
|
||||||
both HTML and *roff are agnostic about whitespace. However,
|
|
||||||
in <pre> blocks and @code/@endcode sections, spacing can
|
|
||||||
have <span class="quote">“<span class="quote">interesting</span>”</span> effects.
|
|
||||||
</p><p>
|
|
||||||
Use either kind of grouping, as
|
|
||||||
appropriate. <code class="filename">doxygroups.cc</code> exists for this
|
|
||||||
purpose. See <code class="filename">stl_iterator.h</code> for a good example
|
|
||||||
of the <span class="quote">“<span class="quote">other</span>”</span> kind of grouping.
|
|
||||||
</p><p>
|
|
||||||
Please use markup tags like @p and @a when referring to things
|
|
||||||
such as the names of function parameters. Use @e for emphasis
|
|
||||||
when necessary. Use @c to refer to other standard names.
|
|
||||||
(Examples of all these abound in the present code.)
|
|
||||||
</p><p>
|
|
||||||
Complicated math functions should use the multi-line
|
|
||||||
format. An example from <code class="filename">random.h</code>:
|
|
||||||
</p><p>
|
|
||||||
</p><div class="literallayout"><p><br />
|
|
||||||
/**<br />
|
|
||||||
* @brief A model of a linear congruential random number generator.<br />
|
|
||||||
*<br />
|
|
||||||
* @f[<br />
|
|
||||||
* x_{i+1}\leftarrow(ax_{i} + c) \bmod m<br />
|
|
||||||
* @f]<br />
|
|
||||||
*/<br />
|
|
||||||
</p></div><p>
|
|
||||||
</p><p>
|
|
||||||
Be careful about using certain, special characters when
|
|
||||||
writing Doxygen comments. Single and double quotes, and
|
|
||||||
separators in filenames are two common trouble spots. When in
|
|
||||||
doubt, consult the following table.
|
|
||||||
</p><div class="table"><a id="id419590"></a><p class="title"><b>Table A.1. HTML to Doxygen Markup Comparison</b></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left"><i></td><td align="left">@a word</td></tr><tr><td align="left"><b></td><td align="left">@b word</td></tr><tr><td align="left"><code></td><td align="left">@c word</td></tr><tr><td align="left"><em></td><td align="left">@a word</td></tr><tr><td align="left"><em></td><td align="left"><em>two words or more</em></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="sect2" title="Docbook"><div class="titlepage"><div><div><h3 class="title"><a id="doc_style.docbook"></a>Docbook</h3></div></div></div><div class="sect3" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><p>
|
|
||||||
Editing the DocBook sources requires an XML editor. Many
|
|
||||||
exist: some notable options
|
|
||||||
include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
|
|
||||||
or <span class="application">Conglomerate</span>.
|
|
||||||
</p><p>
|
|
||||||
Some editors support special <span class="quote">“<span class="quote">XML Validation</span>”</span>
|
|
||||||
modes that can validate the file as it is
|
|
||||||
produced. Recommended is the <span class="command"><strong>nXML Mode</strong></span>
|
|
||||||
for <span class="command"><strong>emacs</strong></span>.
|
|
||||||
</p><p>
|
|
||||||
Besides an editor, additional DocBook files and XML tools are
|
|
||||||
also required.
|
|
||||||
</p><p>
|
|
||||||
Access to the DocBook stylesheets and DTD is required. The
|
|
||||||
stylesheets are usually packaged by vendor, in something
|
|
||||||
like <code class="filename">docbook-style-xsl</code>. To exactly match
|
|
||||||
generated output, please use a version of the stylesheets
|
|
||||||
equivalent
|
|
||||||
to <code class="filename">docbook-style-xsl-1.74.0-5</code>. The
|
|
||||||
installation directory for this package corresponds to
|
|
||||||
the <code class="literal">XSL_STYLE_DIR</code>
|
|
||||||
in <code class="filename">doc/Makefile.am</code> and defaults
|
|
||||||
to <code class="filename">/usr/share/sgml/docbook/xsl-stylesheets</code>.
|
|
||||||
</p><p>
|
|
||||||
For processing XML, an XML processor and some style
|
|
||||||
sheets are necessary. Defaults are <span class="command"><strong>xsltproc</strong></span>
|
|
||||||
provided by <code class="filename">libxslt</code>.
|
|
||||||
</p><p>
|
|
||||||
For validating the XML document, you'll need
|
|
||||||
something like <span class="command"><strong>xmllint</strong></span> and access to the
|
|
||||||
DocBook DTD. These are provided
|
|
||||||
by a vendor package like <code class="filename">libxml2</code>.
|
|
||||||
</p><p>
|
|
||||||
For PDF output, something that transforms valid XML to PDF is
|
|
||||||
required. Possible solutions include
|
|
||||||
<a class="ulink" href="http://dblatex.sourceforge.net" target="_top">dblatex</a>,
|
|
||||||
<span class="command"><strong>xmlto</strong></span>, or <span class="command"><strong>prince</strong></span>. Other
|
|
||||||
options are listed on the DocBook
|
|
||||||
web <a class="ulink" href="http://wiki.docbook.org/topic/DocBookPublishingTools" target="_top">pages</a>. Please
|
|
||||||
consult the <code class="email"><<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>></code> list when
|
|
||||||
preparing printed manuals for current best practice and
|
|
||||||
suggestions.
|
|
||||||
</p><p>
|
|
||||||
Make sure that the XML documentation and markup is valid for
|
|
||||||
any change. This can be done easily, with the validation rules
|
|
||||||
in the <code class="filename">Makefile</code>, which is equivalent to doing:
|
|
||||||
</p><pre class="screen">
|
|
||||||
<strong class="userinput"><code>
|
|
||||||
xmllint --noout --valid <code class="filename">xml/index.xml</code>
|
|
||||||
</code></strong>
|
|
||||||
</pre></div><div class="sect3" title="Generating the DocBook Files"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"></a>Generating the DocBook Files</h4></div></div></div><p>
|
|
||||||
The following Makefile rules generate (in order): an HTML
|
|
||||||
version of all the DocBook documentation, a PDF version of the same, a
|
|
||||||
single XML document, and the result of validating the entire XML
|
|
||||||
document.
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-html-docbook</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-pdf-docbook</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-xml-single-docbook</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-xml-validate-docbook</code></strong></pre><p>
|
|
||||||
</p></div><div class="sect3" title="File Organization and Basics"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"></a>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br />
|
|
||||||
<span class="emphasis"><em>Which files are important</em></span><br />
|
|
||||||
<br />
|
|
||||||
All Docbook files are in the directory<br />
|
|
||||||
libstdc++-v3/doc/xml<br />
|
|
||||||
<br />
|
|
||||||
Inside this directory, the files of importance:<br />
|
|
||||||
spine.xml - index to documentation set<br />
|
|
||||||
manual/spine.xml - index to manual<br />
|
|
||||||
manual/*.xml - individual chapters and sections of the manual<br />
|
|
||||||
faq.xml - index to FAQ<br />
|
|
||||||
api.xml - index to source level / API<br />
|
|
||||||
<br />
|
|
||||||
All *.txml files are template xml files, i.e., otherwise empty files with<br />
|
|
||||||
the correct structure, suitable for filling in with new information.<br />
|
|
||||||
<br />
|
|
||||||
<span class="emphasis"><em>Canonical Writing Style</em></span><br />
|
|
||||||
<br />
|
|
||||||
class template<br />
|
|
||||||
function template<br />
|
|
||||||
member function template<br />
|
|
||||||
(via C++ Templates, Vandevoorde)<br />
|
|
||||||
<br />
|
|
||||||
class in namespace std: allocator, not std::allocator<br />
|
|
||||||
<br />
|
|
||||||
header file: iostream, not <iostream><br />
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<span class="emphasis"><em>General structure</em></span><br />
|
|
||||||
<br />
|
|
||||||
<set><br />
|
|
||||||
<book><br />
|
|
||||||
</book><br />
|
|
||||||
<br />
|
|
||||||
<book><br />
|
|
||||||
<chapter><br />
|
|
||||||
</chapter><br />
|
|
||||||
</book><br />
|
|
||||||
<br />
|
|
||||||
<book><br />
|
|
||||||
<part><br />
|
|
||||||
<chapter><br />
|
|
||||||
<section><br />
|
|
||||||
</section><br />
|
|
||||||
<br />
|
|
||||||
<sect1><br />
|
|
||||||
</sect1><br />
|
|
||||||
<br />
|
|
||||||
<sect1><br />
|
|
||||||
<sect2><br />
|
|
||||||
</sect2><br />
|
|
||||||
</sect1><br />
|
|
||||||
</chapter><br />
|
|
||||||
<br />
|
|
||||||
<chapter><br />
|
|
||||||
</chapter><br />
|
|
||||||
</part><br />
|
|
||||||
</book><br />
|
|
||||||
<br />
|
|
||||||
</set><br />
|
|
||||||
</p></div></div><div class="sect3" title="Markup By Example"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"></a>Markup By Example</h4></div></div></div><p>
|
|
||||||
Complete details on Docbook markup can be found in the DocBook
|
|
||||||
Element Reference,
|
|
||||||
<a class="ulink" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
|
|
||||||
An incomplete reference for HTML to Docbook conversion is
|
|
||||||
detailed in the table below.
|
|
||||||
</p><div class="table"><a id="id502132"></a><p class="title"><b>Table A.2. HTML to Docbook XML Markup Comparison</b></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>,
|
|
||||||
<literallayout></td></tr><tr><td align="left"><ul></td><td align="left"><itemizedlist></td></tr><tr><td align="left"><ol></td><td align="left"><orderedlist></td></tr><tr><td align="left"><il></td><td align="left"><listitem></td></tr><tr><td align="left"><dl></td><td align="left"><variablelist></td></tr><tr><td align="left"><dt></td><td align="left"><term></td></tr><tr><td align="left"><dd></td><td align="left"><listitem></td></tr><tr><td align="left"><a href=""></td><td align="left"><ulink url=""></td></tr><tr><td align="left"><code></td><td align="left"><literal>, <programlisting></td></tr><tr><td align="left"><strong></td><td align="left"><emphasis></td></tr><tr><td align="left"><em></td><td align="left"><emphasis></td></tr><tr><td align="left">"</td><td align="left"><quote></td></tr></tbody></table></div></div><br class="table-break" /><p>
|
|
||||||
And examples of detailed markup for which there are no real HTML
|
|
||||||
equivalents are listed in the table below.
|
|
||||||
</p><div class="table"><a id="id502333"></a><p class="title"><b>Table A.3. Docbook XML Element Use</b></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><structname></td><td align="left"><structname>char_traits</structname></td></tr><tr><td align="left"><classname></td><td align="left"><classname>string</classname></td></tr><tr><td align="left"><function></td><td align="left">
|
|
||||||
<p><function>clear()</function></p>
|
|
||||||
<p><function>fs.clear()</function></p>
|
|
||||||
</td></tr><tr><td align="left"><type></td><td align="left"><type>long long</type></td></tr><tr><td align="left"><varname></td><td align="left"><varname>fs</varname></td></tr><tr><td align="left"><literal></td><td align="left">
|
|
||||||
<p><literal>-Weffc++</literal></p>
|
|
||||||
<p><literal>rel_ops</literal></p>
|
|
||||||
</td></tr><tr><td align="left"><constant></td><td align="left">
|
|
||||||
<p><constant>_GNU_SOURCE</constant></p>
|
|
||||||
<p><constant>3.0</constant></p>
|
|
||||||
</td></tr><tr><td align="left"><command></td><td align="left"><command>g++</command></td></tr><tr><td align="left"><errortext></td><td align="left"><errortext>In instantiation of</errortext></td></tr><tr><td align="left"><filename></td><td align="left">
|
|
||||||
<p><filename class="headerfile">ctype.h</filename></p>
|
|
||||||
<p><filename class="directory">/home/gcc/build</filename></p>
|
|
||||||
<p><filename class="libraryfile">libstdc++.so</filename></p>
|
|
||||||
</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="sect2" title="Combines"><div class="titlepage"><div><div><h3 class="title"><a id="doc_style.combines"></a>Combines</h3></div></div></div><div class="sect3" title="Generating Combines and Assemblages"><div class="titlepage"><div><div><h4 class="title"><a id="combines.rules"></a>Generating Combines and Assemblages</h4></div></div></div><p>
|
|
||||||
The following Makefile rules are defaults, and are usually
|
|
||||||
aliased to variable rules.
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-html</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-man</code></strong></pre><p>
|
|
||||||
</p><p>
|
|
||||||
</p><pre class="screen"><strong class="userinput"><code>make doc-pdf</code></strong></pre><p>
|
|
||||||
</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Coding Style </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Chapter 4. Support" /><link rel="prev" href="support.html" title="Chapter 4. Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="support.html" title="Chapter 4. Support"/><link rel="prev" href="support.html" title="Chapter 4. Support"/><link rel="next" href="termination.html" title="Termination"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4.
|
||||||
Support
|
Support
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Dynamic Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr/></div><div class="section" title="Dynamic Memory"><div class="titlepage"><div><div><h2 class="title"><a id="std.support.memory"/>Dynamic Memory</h2></div></div></div><p>
|
||||||
There are six flavors each of <code class="function">new</code> and
|
There are six flavors each of <code class="function">new</code> and
|
||||||
<code class="function">delete</code>, so make certain that you're using the right
|
<code class="function">delete</code>, so make certain that you're using the right
|
||||||
ones. Here are quickie descriptions of <code class="function">new</code>:
|
ones. Here are quickie descriptions of <code class="function">new</code>:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
single object form, throwing a
|
single object form, throwing a
|
||||||
<code class="classname">bad_alloc</code> on errors; this is what most
|
<code class="classname">bad_alloc</code> on errors; this is what most
|
||||||
people are used to using
|
people are used to using
|
||||||
|
|
@ -66,7 +66,7 @@
|
||||||
</pre><p>
|
</pre><p>
|
||||||
<code class="classname">bad_alloc</code> is derived from the base <code class="classname">exception</code>
|
<code class="classname">bad_alloc</code> is derived from the base <code class="classname">exception</code>
|
||||||
class defined in Sect1 19.
|
class defined in Sect1 19.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4.
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="support.html">Prev</a> </td><td align="center"><a accesskey="u" href="support.html">Up</a></td><td align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 4.
|
||||||
Support
|
Support
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Termination</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Termination</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. Algorithms</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 22. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 24. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 23. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="ext_utilities.html" title="Chapter 22. Utilities"/><link rel="next" href="ext_numerics.html" title="Chapter 24. Numerics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. Algorithms</th></tr><tr><td align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 23. Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 23. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
|
</th><td align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 23. Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"/>Chapter 23. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
|
||||||
and count_if. The standard versions return their results. The
|
and count_if. The standard versions return their results. The
|
||||||
additional signatures return void, but take a final parameter by
|
additional signatures return void, but take a final parameter by
|
||||||
reference to which they assign their results, e.g.,
|
reference to which they assign their results, e.g.,
|
||||||
|
|
@ -15,9 +15,9 @@
|
||||||
copy_n (_InputIter first, _Size count, _OutputIter result);</pre><p>which copies the first 'count' elements at 'first' into 'result'.
|
copy_n (_InputIter first, _Size count, _OutputIter result);</pre><p>which copies the first 'count' elements at 'first' into 'result'.
|
||||||
</p><p>25.3 (sorting 'n' heaps 'n' stuff) is extended with some helper
|
</p><p>25.3 (sorting 'n' heaps 'n' stuff) is extended with some helper
|
||||||
predicates. Look in the doxygen-generated pages for notes on these.
|
predicates. Look in the doxygen-generated pages for notes on these.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
|
||||||
nondescending order.</p></li></ul></div><p>25.3.8 (lexicographical_compare) is extended with
|
nondescending order.</p></li></ul></div><p>25.3.8 (lexicographical_compare) is extended with
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1,
|
lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1,
|
||||||
_InputIter2 first2, _InputIter2 last2)</pre><p>which does... what?
|
_InputIter2 first2, _InputIter2 last2)</pre><p>which does... what?
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Numerics</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 22. Utilities </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 24. Numerics</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. Allocators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bk01pt03ch19s07.html" title="Diagnostics" /><link rel="next" href="bitmap_allocator.html" title="bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. Allocators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 20. Allocators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="bk01pt03ch19s07.html" title="Diagnostics"/><link rel="next" href="bitmap_allocator.html" title="bitmap_allocator"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. Allocators</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 20. Allocators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator"></a>Chapter 20. Allocators</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></div><div class="sect1" title="mt_allocator"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.allocator.mt"></a>mt_allocator</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 20. Allocators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator"/>Chapter 20. Allocators</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="section"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></div><div class="section" title="mt_allocator"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"/>mt_allocator</h2></div></div></div><p>
|
||||||
</p><div class="sect2" title="Intro"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.intro"></a>Intro</h3></div></div></div><p>
|
</p><div class="section" title="Intro"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.intro"/>Intro</h3></div></div></div><p>
|
||||||
The mt allocator [hereinafter referred to simply as "the allocator"]
|
The mt allocator [hereinafter referred to simply as "the allocator"]
|
||||||
is a fixed size (power of two) allocator that was initially
|
is a fixed size (power of two) allocator that was initially
|
||||||
developed specifically to suit the needs of multi threaded
|
developed specifically to suit the needs of multi threaded
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
The aim of this document is to describe - from an application point of
|
The aim of this document is to describe - from an application point of
|
||||||
view - the "inner workings" of the allocator.
|
view - the "inner workings" of the allocator.
|
||||||
</p></div><div class="sect2" title="Design Issues"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.design_issues"></a>Design Issues</h3></div></div></div><div class="sect3" title="Overview"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.overview"></a>Overview</h4></div></div></div><p> There are three general components to the allocator: a datum
|
</p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.design_issues"/>Design Issues</h3></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.overview"/>Overview</h4></div></div></div><p> There are three general components to the allocator: a datum
|
||||||
describing the characteristics of the memory pool, a policy class
|
describing the characteristics of the memory pool, a policy class
|
||||||
containing this pool that links instantiation types to common or
|
containing this pool that links instantiation types to common or
|
||||||
individual pools, and a class inheriting from the policy class that is
|
individual pools, and a class inheriting from the policy class that is
|
||||||
|
|
@ -56,10 +56,10 @@ tuning, for instance.
|
||||||
</pre><p> This class has the interface required for standard library allocator
|
</pre><p> This class has the interface required for standard library allocator
|
||||||
classes, namely member functions <code class="code">allocate</code> and
|
classes, namely member functions <code class="code">allocate</code> and
|
||||||
<code class="code">deallocate</code>, plus others.
|
<code class="code">deallocate</code>, plus others.
|
||||||
</p></div></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.impl"></a>Implementation</h3></div></div></div><div class="sect3" title="Tunable Parameters"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h4></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
|
</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.impl"/>Implementation</h3></div></div></div><div class="section" title="Tunable Parameters"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.tune"/>Tunable Parameters</h4></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
|
||||||
exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
|
exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
|
||||||
these parameters, which include settings for
|
these parameters, which include settings for
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only
|
||||||
happen before any allocations take place, when the allocator itself is
|
happen before any allocations take place, when the allocator itself is
|
||||||
initialized. For instance:
|
initialized. For instance:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
|
|
@ -95,7 +95,7 @@ int main()
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
</pre></div><div class="sect3" title="Initialization"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.init"></a>Initialization</h4></div></div></div><p>
|
</pre></div><div class="section" title="Initialization"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.init"/>Initialization</h4></div></div></div><p>
|
||||||
The static variables (pointers to freelists, tuning parameters etc)
|
The static variables (pointers to freelists, tuning parameters etc)
|
||||||
are initialized as above, or are set to the global defaults.
|
are initialized as above, or are set to the global defaults.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -187,7 +187,7 @@ The _S_initialize() function:
|
||||||
for this specific bin. This only occurs when a number of blocks
|
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
|
are grabbed from the global list to a thread specific list or when
|
||||||
a thread decides to return some blocks to the global freelist.
|
a thread decides to return some blocks to the global freelist.
|
||||||
</p></div><div class="sect3" title="Deallocation Notes"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.deallocation"></a>Deallocation Notes</h4></div></div></div><p> Notes about deallocation. This allocator does not explicitly
|
</p></div><div class="section" title="Deallocation Notes"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.mt.deallocation"/>Deallocation Notes</h4></div></div></div><p> Notes about deallocation. This allocator does not explicitly
|
||||||
release memory. Because of this, memory debugging programs like
|
release memory. Because of this, memory debugging programs like
|
||||||
valgrind or purify may notice leaks: sorry about this
|
valgrind or purify may notice leaks: sorry about this
|
||||||
inconvenience. Operating systems will reclaim allocated memory at
|
inconvenience. Operating systems will reclaim allocated memory at
|
||||||
|
|
@ -212,9 +212,9 @@ containers, this works, as an instance of the allocator is constructed
|
||||||
as part of a container's constructor. However, this assumption is
|
as part of a container's constructor. However, this assumption is
|
||||||
implementation-specific, and subject to change. For an example of a
|
implementation-specific, and subject to change. For an example of a
|
||||||
pool that frees memory, see the following
|
pool that frees memory, see the following
|
||||||
<a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup" target="_top">
|
<a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup">
|
||||||
example.</a>
|
example.</a>
|
||||||
</p></div></div><div class="sect2" title="Single Thread Example"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.example_single"></a>Single Thread Example</h3></div></div></div><p>
|
</p></div></div><div class="section" title="Single Thread Example"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.example_single"/>Single Thread Example</h3></div></div></div><p>
|
||||||
Let's start by describing how the data on a freelist is laid out in memory.
|
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):
|
This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
|
|
@ -290,7 +290,7 @@ of the global freelist and update the pointer as needed
|
||||||
The decision to add deallocated blocks to the front of the freelist was made
|
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%
|
after a set of performance measurements that showed that this is roughly 10%
|
||||||
faster than maintaining a set of "last pointers" as well.
|
faster than maintaining a set of "last pointers" as well.
|
||||||
</p></div><div class="sect2" title="Multiple Thread Example"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h3></div></div></div><p>
|
</p></div><div class="section" title="Multiple Thread Example"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.example_multi"/>Multiple Thread Example</h3></div></div></div><p>
|
||||||
In the ST example we never used the thread_id variable present in each block.
|
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.
|
Let's start by explaining the purpose of this in a MT application.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -394,4 +394,4 @@ mutex to be locked) this operation is also made in chunks of blocks
|
||||||
a threads freelist mentioned above). The "formula" used can probably
|
a threads freelist mentioned above). The "formula" used can probably
|
||||||
be improved to further reduce the risk of blocks being "bounced back
|
be improved to further reduce the risk of blocks being "bounced back
|
||||||
and forth" between freelists.
|
and forth" between freelists.
|
||||||
</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> bitmap_allocator</td></tr></table></div></body></html>
|
</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td align="left" valign="top">Diagnostics </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> bitmap_allocator</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bk01pt03pr01.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="bk01pt03pr01.html" title=""/><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 16. Compile Time Checks"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"></a>Chapter 16. Compile Time Checks</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 16. Compile Time Checks"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"/>Chapter 16. Compile Time Checks</h2></div></div></div><p>
|
||||||
Also known as concept checking.
|
Also known as concept checking.
|
||||||
</p><p>In 1999, SGI added <span class="emphasis"><em>concept checkers</em></span> to their implementation
|
</p><p>In 1999, SGI added <span class="emphasis"><em>concept checkers</em></span> to their implementation
|
||||||
of the STL: code which checked the template parameters of
|
of the STL: code which checked the template parameters of
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
</p><p>The primary author of the checking code, Jeremy Siek, had already
|
</p><p>The primary author of the checking code, Jeremy Siek, had already
|
||||||
started work on a replacement implementation. The new code has been
|
started work on a replacement implementation. The new code has been
|
||||||
formally reviewed and accepted into
|
formally reviewed and accepted into
|
||||||
<a class="ulink" href="http://www.boost.org/libs/concept_check/concept_check.htm" target="_top">the
|
<a class="link" href="http://www.boost.org/libs/concept_check/concept_check.htm">the
|
||||||
Boost libraries</a>, and we are pleased to incorporate it into the
|
Boost libraries</a>, and we are pleased to incorporate it into the
|
||||||
GNU C++ library.
|
GNU C++ library.
|
||||||
</p><p>The new version imposes a much smaller space overhead on the generated
|
</p><p>The new version imposes a much smaller space overhead on the generated
|
||||||
|
|
@ -37,4 +37,4 @@
|
||||||
support for template parameter constraints based on concepts in the core
|
support for template parameter constraints based on concepts in the core
|
||||||
language. This will obviate the need for the library-simulated concept
|
language. This will obviate the need for the library-simulated concept
|
||||||
checking described above.
|
checking described above.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td align="left" valign="top"> </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Concurrency</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 27. Demangling" /><link rel="next" href="bk01pt03ch28s02.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 28. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="ext_demangling.html" title="Chapter 27. Demangling"/><link rel="next" href="bk01pt03ch28s02.html" title="Implementation"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Concurrency</th></tr><tr><td align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch28s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 28. Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 28. Concurrency</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch28s03.html">Use</a></span></dt></dl></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="sect2" title="Interface to Locks and Mutexes"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <ext/concurrence.h> contains all the higher-level
|
</th><td align="right"> <a accesskey="n" href="bk01pt03ch28s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 28. Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"/>Chapter 28. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch28s03.html">Use</a></span></dt></dl></div><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency.design"/>Design</h2></div></div></div><div class="section" title="Interface to Locks and Mutexes"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"/>Interface to Locks and Mutexes</h3></div></div></div><p>The file <ext/concurrence.h> contains all the higher-level
|
||||||
constructs for playing with threads. In contrast to the atomics layer,
|
constructs for playing with threads. In contrast to the atomics layer,
|
||||||
the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
|
the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -16,7 +16,7 @@ that support multiple threads.)
|
||||||
available locking
|
available locking
|
||||||
policies: <code class="code">_S_single</code>, <code class="code">_S_mutex</code>,
|
policies: <code class="code">_S_single</code>, <code class="code">_S_mutex</code>,
|
||||||
and <code class="code">_S_atomic</code>.
|
and <code class="code">_S_atomic</code>.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">_S_single</code></p><p>Indicates single-threaded code that does not need locking.
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">_S_single</code></p><p>Indicates single-threaded code that does not need locking.
|
||||||
</p></li><li class="listitem"><p><code class="code">_S_mutex</code></p><p>Indicates multi-threaded code using thread-layer abstractions.
|
</p></li><li class="listitem"><p><code class="code">_S_mutex</code></p><p>Indicates multi-threaded code using thread-layer abstractions.
|
||||||
</p></li><li class="listitem"><p><code class="code">_S_atomic</code></p><p>Indicates multi-threaded code using atomic operations.
|
</p></li><li class="listitem"><p><code class="code">_S_atomic</code></p><p>Indicates multi-threaded code using atomic operations.
|
||||||
</p></li></ul></div><p>The compile-time constant <code class="code">__default_lock_policy</code> is set
|
</p></li></ul></div><p>The compile-time constant <code class="code">__default_lock_policy</code> is set
|
||||||
|
|
@ -30,7 +30,7 @@ community. This version takes a <code class="code">__mutex</code> reference, and
|
||||||
locks it during construction of <code class="code">__scoped_locke</code> and
|
locks it during construction of <code class="code">__scoped_locke</code> and
|
||||||
unlocks it during destruction. This is an efficient way of locking
|
unlocks it during destruction. This is an efficient way of locking
|
||||||
critical sections, while retaining exception-safety.
|
critical sections, while retaining exception-safety.
|
||||||
</p></div><div class="sect2" title="Interface to Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"></a>Interface to Atomic Functions</h3></div></div></div><p>
|
</p></div><div class="section" title="Interface to Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"/>Interface to Atomic Functions</h3></div></div></div><p>
|
||||||
Two functions and one type form the base of atomic support.
|
Two functions and one type form the base of atomic support.
|
||||||
</p><p>The type <code class="code">_Atomic_word</code> is a signed integral type
|
</p><p>The type <code class="code">_Atomic_word</code> is a signed integral type
|
||||||
supporting atomic operations.
|
supporting atomic operations.
|
||||||
|
|
@ -44,7 +44,7 @@ void
|
||||||
__atomic_add_dispatch(volatile _Atomic_word*, int);
|
__atomic_add_dispatch(volatile _Atomic_word*, int);
|
||||||
</pre><p>Both of these functions are declared in the header file
|
</pre><p>Both of these functions are declared in the header file
|
||||||
<ext/atomicity.h>, and are in <code class="code">namespace __gnu_cxx</code>.
|
<ext/atomicity.h>, and are in <code class="code">namespace __gnu_cxx</code>.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<code class="code">
|
<code class="code">
|
||||||
__exchange_and_add_dispatch
|
__exchange_and_add_dispatch
|
||||||
</code>
|
</code>
|
||||||
|
|
@ -63,7 +63,7 @@ __exchange_and_add_dispatch
|
||||||
</code>
|
</code>
|
||||||
</p><p>
|
</p><p>
|
||||||
Calls through to either of:
|
Calls through to either of:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">__exchange_and_add</code>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">__exchange_and_add</code>
|
||||||
</p><p>Multi-thread version. Inlined if compiler-generated builtin atomics
|
</p><p>Multi-thread version. Inlined if compiler-generated builtin atomics
|
||||||
can be used, otherwise resolved at link time to a non-builtin code
|
can be used, otherwise resolved at link time to a non-builtin code
|
||||||
sequence.
|
sequence.
|
||||||
|
|
@ -88,4 +88,4 @@ _GLIBCXX_WRITE_MEM_BARRIER
|
||||||
</p><p>
|
</p><p>
|
||||||
Which expand to the appropriate write and read barrier required by the
|
Which expand to the appropriate write and read barrier required by the
|
||||||
host hardware and operating system.
|
host hardware and operating system.
|
||||||
</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch28s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
|
</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch28s02.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 27. Demangling </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Implementation</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bitmap_allocator.html" title="bitmap_allocator" /><link rel="next" href="bk01pt03ch21s02.html" title="HP/SGI" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 21. Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="bitmap_allocator.html" title="bitmap_allocator"/><link rel="next" href="bk01pt03ch21s02.html" title="HP/SGI"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. Containers</th></tr><tr><td align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 21. Containers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 21. Containers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></div><p>
|
</th><td align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 21. Containers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"/>Chapter 21. Containers</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></div><p>
|
||||||
</p><div class="sect1" title="Policy Based Data Structures"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.pbds"></a>Policy Based Data Structures</h2></div></div></div><p>
|
</p><div class="section" title="Policy Based Data Structures"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"/>Policy Based Data Structures</h2></div></div></div><p>
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html" target="_top">More details here</a>.
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html">More details here</a>.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> HP/SGI</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td align="left" valign="top">bitmap_allocator </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> HP/SGI</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Demangling</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 26. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 28. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 27. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="ext_io.html" title="Chapter 26. Input and Output"/><link rel="next" href="ext_concurrency.html" title="Chapter 28. Concurrency"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Demangling</th></tr><tr><td align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 27. Demangling"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 27. Demangling</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 27. Demangling"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"/>Chapter 27. Demangling</h2></div></div></div><p>
|
||||||
Transforming C++ ABI identifiers (like RTTI symbols) into the
|
Transforming C++ ABI identifiers (like RTTI symbols) into the
|
||||||
original C++ source identifiers is called
|
original C++ source identifiers is called
|
||||||
<span class="quote">“<span class="quote">demangling.</span>”</span>
|
<span class="quote">“<span class="quote">demangling.</span>”</span>
|
||||||
</p><p>
|
</p><p>
|
||||||
If you have read the <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01115.html" target="_top">source
|
If you have read the <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01115.html">source
|
||||||
documentation for <code class="code">namespace abi</code></a> then you are
|
documentation for <code class="code">namespace abi</code></a> then you are
|
||||||
aware of the cross-vendor C++ ABI in use by GCC. One of the
|
aware of the cross-vendor C++ ABI in use by GCC. One of the
|
||||||
exposed functions is used for demangling,
|
exposed functions is used for demangling,
|
||||||
|
|
@ -71,4 +71,4 @@ int main()
|
||||||
be writing C++ in order to demangle C++. (That also means we have to
|
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()
|
use crummy memory management facilities, so don't forget to free()
|
||||||
the returned char array.)
|
the returned char array.)
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Concurrency</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 26. Input and Output </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 28. Concurrency</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,25 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 25. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 27. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 26. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="ext_iterators.html" title="Chapter 25. Iterators"/><link rel="next" href="ext_demangling.html" title="Chapter 27. Demangling"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Input and Output</th></tr><tr><td align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 26. Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 26. Input and Output</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
|
</th><td align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 26. Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"/>Chapter 26. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
|
||||||
Extensions allowing <code class="code">filebuf</code>s to be constructed from
|
Extensions allowing <code class="code">filebuf</code>s to be constructed from
|
||||||
"C" types like FILE*s and file descriptors.
|
"C" types like FILE*s and file descriptors.
|
||||||
</p><div class="sect1" title="Derived filebufs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.io.filebuf_derived"></a>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
|
</p><div class="section" title="Derived filebufs"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io.filebuf_derived"/>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
|
||||||
<code class="code">std::filebuf</code>s from C stdio types such as
|
<code class="code">std::filebuf</code>s from C stdio types such as
|
||||||
<code class="code">FILE*</code>s and POSIX file descriptors.
|
<code class="code">FILE*</code>s and POSIX file descriptors.
|
||||||
Today the recommended way to use stdio types with libstdc++
|
Today the recommended way to use stdio types with libstdc++
|
||||||
IOStreams is via the <code class="code">stdio_filebuf</code> class (see below),
|
IOStreams is via the <code class="code">stdio_filebuf</code> class (see below),
|
||||||
but earlier releases provided slightly different mechanisms.
|
but earlier releases provided slightly different mechanisms.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
|
||||||
<code class="code">basic_filebuf(__c_file_type*, ios_base::openmode, int_type);
|
<code class="code">basic_filebuf(__c_file_type*, ios_base::openmode, int_type);
|
||||||
</code>
|
</code>
|
||||||
This comes in very handy in a number of places, such as
|
This comes in very handy in a number of places, such as
|
||||||
attaching Unix sockets, pipes, and anything else which uses file
|
attaching Unix sockets, pipes, and anything else which uses file
|
||||||
descriptors, into the IOStream buffering classes. The three
|
descriptors, into the IOStream buffering classes. The three
|
||||||
arguments are as follows:
|
arguments are as follows:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p><code class="code">__c_file_type* F </code>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">__c_file_type* F </code>
|
||||||
// the __c_file_type typedef usually boils down to stdio's FILE
|
// the __c_file_type typedef usually boils down to stdio's FILE
|
||||||
</p></li><li class="listitem"><p><code class="code">ios_base::openmode M </code>
|
</p></li><li class="listitem"><p><code class="code">ios_base::openmode M </code>
|
||||||
// same as all the other uses of openmode
|
// same as all the other uses of openmode
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
the <code class="code">fd()</code> function were removed from the standard
|
the <code class="code">fd()</code> function were removed from the standard
|
||||||
filebuf. Instead, <code class="code"><ext/stdio_filebuf.h></code> contains
|
filebuf. Instead, <code class="code"><ext/stdio_filebuf.h></code> contains
|
||||||
a derived class called
|
a derived class called
|
||||||
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html" target="_top"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
|
||||||
This class can be constructed from a C <code class="code">FILE*</code> or a file
|
This class can be constructed from a C <code class="code">FILE*</code> or a file
|
||||||
descriptor, and provides the <code class="code">fd()</code> function.
|
descriptor, and provides the <code class="code">fd()</code> function.
|
||||||
</p></li></ul></div><p>If you want to access a <code class="code">filebuf</code>'s file descriptor to
|
</p></li></ul></div><p>If you want to access a <code class="code">filebuf</code>'s file descriptor to
|
||||||
|
|
@ -47,4 +47,4 @@
|
||||||
call) then you might be interested in Henry Suter's RWLock class.
|
call) then you might be interested in Henry Suter's RWLock class.
|
||||||
|
|
||||||
</p><p>
|
</p><p>
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Demangling</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 25. Iterators </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 27. Demangling</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Iterators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 24. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 26. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 25. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="ext_numerics.html" title="Chapter 24. Numerics"/><link rel="next" href="ext_io.html" title="Chapter 26. Input and Output"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Iterators</th></tr><tr><td align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 25. Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 25. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
|
</th><td align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 25. Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"/>Chapter 25. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
|
||||||
original HP STL implementation (the language wasn't rich enough at the
|
original HP STL implementation (the language wasn't rich enough at the
|
||||||
time). For backwards compatibility, base classes are provided which
|
time). For backwards compatibility, base classes are provided which
|
||||||
declare the same nested typedefs:
|
declare the same nested typedefs:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>input_iterator</p></li><li class="listitem"><p>output_iterator</p></li><li class="listitem"><p>forward_iterator</p></li><li class="listitem"><p>bidirectional_iterator</p></li><li class="listitem"><p>random_access_iterator</p></li></ul></div><p>24.3.4 describes iterator operation <code class="code">distance</code>, which takes
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>input_iterator</p></li><li class="listitem"><p>output_iterator</p></li><li class="listitem"><p>forward_iterator</p></li><li class="listitem"><p>bidirectional_iterator</p></li><li class="listitem"><p>random_access_iterator</p></li></ul></div><p>24.3.4 describes iterator operation <code class="code">distance</code>, which takes
|
||||||
two iterators and returns a result. It is extended by another signature
|
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
|
which takes two iterators and a reference to a result. The result is
|
||||||
modified, and the function returns nothing.
|
modified, and the function returns nothing.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Input and Output</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 24. Numerics </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 26. Input and Output</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Numerics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 23. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 25. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 24. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="ext_algorithms.html" title="Chapter 23. Algorithms"/><link rel="next" href="ext_iterators.html" title="Chapter 25. Iterators"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Numerics</th></tr><tr><td align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 24. Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 24. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as accumulate, are extended
|
</th><td align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 24. Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"/>Chapter 24. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as accumulate, are extended
|
||||||
with the following functions:
|
with the following functions:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
power (x, n);
|
power (x, n);
|
||||||
|
|
@ -17,4 +17,4 @@
|
||||||
That is, it assigns value to *first, value + 1 to *(first + 1) and so
|
That is, it assigns value to *first, value + 1 to *(first + 1) and so
|
||||||
on." Quoted from SGI documentation.
|
on." Quoted from SGI documentation.
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Iterators</td></tr></table></div></body></html>
|
void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 23. Algorithms </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 25. Iterators</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Utilities</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bk01pt03ch21s03.html" title="Deprecated HP/SGI" /><link rel="next" href="ext_algorithms.html" title="Chapter 23. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch21s03.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 22. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="bk01pt03ch21s03.html" title="Deprecated HP/SGI"/><link rel="next" href="ext_algorithms.html" title="Chapter 23. Algorithms"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Utilities</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch21s03.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 22. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 22. Utilities</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 22. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"/>Chapter 22. Utilities</h2></div></div></div><p>
|
||||||
The <functional> header contains many additional functors
|
The <functional> header contains many additional functors
|
||||||
and helper functions, extending section 20.3. They are
|
and helper functions, extending section 20.3. They are
|
||||||
implemented in the file stl_function.h:
|
implemented in the file stl_function.h:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication. *
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication. *
|
||||||
</p></li><li class="listitem"><p>The functor <code class="code">identity</code>, whose <code class="code">operator()</code>
|
</p></li><li class="listitem"><p>The functor <code class="code">identity</code>, whose <code class="code">operator()</code>
|
||||||
returns the argument unchanged. *
|
returns the argument unchanged. *
|
||||||
</p></li><li class="listitem"><p>Composition functors <code class="code">unary_function</code> and
|
</p></li><li class="listitem"><p>Composition functors <code class="code">unary_function</code> and
|
||||||
|
|
@ -38,4 +38,4 @@ get_temporary_buffer(5, (int*)0);
|
||||||
</p><p>
|
</p><p>
|
||||||
The specialized algorithms of section 20.4.4 are extended with
|
The specialized algorithms of section 20.4.4 are extended with
|
||||||
<code class="code">uninitialized_copy_n</code>. *
|
<code class="code">uninitialized_copy_n</code>. *
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated HP/SGI </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. Algorithms</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch21s03.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td align="left" valign="top">Deprecated HP/SGI </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 23. Algorithms</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="localization.html" title="Chapter 8. Localization" /><link rel="prev" href="localization.html" title="Chapter 8. Localization" /><link rel="next" href="containers.html" title="Chapter 9. Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="localization.html" title="Chapter 8. Localization"/><link rel="prev" href="localization.html" title="Chapter 8. Localization"/><link rel="next" href="containers.html" title="Chapter 9. Containers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8.
|
||||||
Localization
|
Localization
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section" title="Facets"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section" title="ctype"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h5 class="title"><a id="id422690"></a>Specializations</h5></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr/></div><div class="section" title="Facets"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization.facet"/>Facets</h2></div></div></div><div class="section" title="ctype"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"/>ctype</h3></div></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"/>Implementation</h4></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h5 class="title"><a id="id479585"/>Specializations</h5></div></div></div><p>
|
||||||
For the required specialization codecvt<wchar_t, char, mbstate_t> ,
|
For the required specialization codecvt<wchar_t, char, mbstate_t> ,
|
||||||
conversions are made between the internal character set (always UCS4
|
conversions are made between the internal character set (always UCS4
|
||||||
on GNU/Linux) and whatever the currently selected locale for the
|
on GNU/Linux) and whatever the currently selected locale for the
|
||||||
|
|
@ -28,7 +28,7 @@ to wchar_t and wcsrtombs for conversions between wchar_t and char.
|
||||||
</p><p>
|
</p><p>
|
||||||
Neither of these two required specializations deals with Unicode
|
Neither of these two required specializations deals with Unicode
|
||||||
characters.
|
characters.
|
||||||
</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"/>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
How to deal with the global locale issue?
|
How to deal with the global locale issue?
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
How to deal with different types than char, wchar_t? </p></li><li class="listitem"><p>
|
How to deal with different types than char, wchar_t? </p></li><li class="listitem"><p>
|
||||||
|
|
@ -50,32 +50,29 @@ characters.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
Rename abstract base class. See if just smash-overriding is a
|
Rename abstract base class. See if just smash-overriding is a
|
||||||
better approach. Clarify, add sanity to naming.
|
better approach. Clarify, add sanity to naming.
|
||||||
</p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id442703"></a><p><span class="title"><i>
|
</p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id479710"/><p><span class="citetitle"><em class="citetitle">
|
||||||
The GNU C Library
|
The GNU C Library
|
||||||
</i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry" title="Correspondence"><a id="id426343"></a><p><span class="title"><i>
|
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="id479750"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Correspondence
|
Correspondence
|
||||||
</i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id468198"></a><p><span class="title"><i>
|
</em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id479776"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 14882:1998 Programming languages - C++
|
ISO/IEC 14882:1998 Programming languages - C++
|
||||||
</i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id468216"></a><p><span class="title"><i>
|
</em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id479795"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 9899:1999 Programming languages - C
|
ISO/IEC 9899:1999 Programming languages - C
|
||||||
</i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id398382"></a><p><span class="biblioid">
|
</em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id479814"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.unix.org/version3/ieee_std.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
|
||||||
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
|
</em>. </span><span class="copyright">Copyright © 1999
|
||||||
</em>
|
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="id479843"/><p><span class="citetitle"><em class="citetitle">
|
||||||
</a>
|
|
||||||
. </span><span class="copyright">Copyright © 1999
|
|
||||||
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id398412"></a><p><span class="title"><i>
|
|
||||||
The C++ Programming Language, Special Edition
|
The C++ Programming Language, Special Edition
|
||||||
</i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley
|
Addison Wesley
|
||||||
. </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id395406"></a><p><span class="title"><i>
|
. </span></span></p></div><div class="biblioentry"><a id="id479882"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Standard C++ IOStreams and Locales
|
Standard C++ IOStreams and Locales
|
||||||
</i>. </span><span class="subtitle">
|
</em>. </span><span class="subtitle">
|
||||||
Advanced Programmer's Guide and Reference
|
Advanced Programmer's Guide and Reference
|
||||||
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley Longman
|
Addison Wesley Longman
|
||||||
. </span></span></p></div></div></div><div class="section" title="codecvt"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"></a>codecvt</h3></div></div></div><p>
|
. </span></span></p></div></div></div><div class="section" title="codecvt"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"/>codecvt</h3></div></div></div><p>
|
||||||
The standard class codecvt attempts to address conversions between
|
The standard class codecvt attempts to address conversions between
|
||||||
different character encoding schemes. In particular, the standard
|
different character encoding schemes. In particular, the standard
|
||||||
attempts to detail conversions between the implementation-defined wide
|
attempts to detail conversions between the implementation-defined wide
|
||||||
|
|
@ -89,7 +86,7 @@ including Unicode and UTF8. Design issues and requirements are
|
||||||
addressed, and examples of correct usage for both the required
|
addressed, and examples of correct usage for both the required
|
||||||
specializations for wide and narrow characters and the
|
specializations for wide and narrow characters and the
|
||||||
implementation-provided extended functionality are given.
|
implementation-provided extended functionality are given.
|
||||||
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"></a>Requirements</h4></div></div></div><p>
|
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"/>Requirements</h4></div></div></div><p>
|
||||||
Around page 425 of the C++ Standard, this charming heading comes into view:
|
Around page 425 of the C++ Standard, this charming heading comes into view:
|
||||||
</p><div class="blockquote"><blockquote class="blockquote"><p>
|
</p><div class="blockquote"><blockquote class="blockquote"><p>
|
||||||
22.2.1.5 - Template class codecvt
|
22.2.1.5 - Template class codecvt
|
||||||
|
|
@ -135,7 +132,7 @@ third template parameter, stateT.</p><p>
|
||||||
Two: The required conversions, by specifying mbstate_t as the third
|
Two: The required conversions, by specifying mbstate_t as the third
|
||||||
template parameter, imply an implementation strategy that is mostly
|
template parameter, imply an implementation strategy that is mostly
|
||||||
(or wholly) based on the underlying C library, and the functions
|
(or wholly) based on the underlying C library, and the functions
|
||||||
mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"></a>Design</h4></div></div></div><div class="section" title="wchar_t Size"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"></a><span class="type">wchar_t</span> Size</h5></div></div></div><p>
|
mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"/>Design</h4></div></div></div><div class="section" title="wchar_t Size"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"/><span class="type">wchar_t</span> Size</h5></div></div></div><p>
|
||||||
The simple implementation detail of wchar_t's size seems to
|
The simple implementation detail of wchar_t's size seems to
|
||||||
repeatedly confound people. Many systems use a two byte,
|
repeatedly confound people. Many systems use a two byte,
|
||||||
unsigned integral type to represent wide characters, and use an
|
unsigned integral type to represent wide characters, and use an
|
||||||
|
|
@ -147,7 +144,7 @@ mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Desi
|
||||||
size for the type wchar_t.
|
size for the type wchar_t.
|
||||||
</p><p>
|
</p><p>
|
||||||
Thus, portable C++ code cannot assume a byte size (or endianness) either.
|
Thus, portable C++ code cannot assume a byte size (or endianness) either.
|
||||||
</p></div><div class="section" title="Support for Unicode"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"></a>Support for Unicode</h5></div></div></div><p>
|
</p></div><div class="section" title="Support for Unicode"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"/>Support for Unicode</h5></div></div></div><p>
|
||||||
Probably the most frequently asked question about code conversion
|
Probably the most frequently asked question about code conversion
|
||||||
is: "So dudes, what's the deal with Unicode strings?"
|
is: "So dudes, what's the deal with Unicode strings?"
|
||||||
The dude part is optional, but apparently the usefulness of
|
The dude part is optional, but apparently the usefulness of
|
||||||
|
|
@ -164,7 +161,7 @@ mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Desi
|
||||||
needed is some kind of generalized type that accounts for the
|
needed is some kind of generalized type that accounts for the
|
||||||
issues that abstract encodings will need. The minimum information
|
issues that abstract encodings will need. The minimum information
|
||||||
that is required includes:
|
that is required includes:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Identifiers for each of the codesets involved in the
|
Identifiers for each of the codesets involved in the
|
||||||
conversion. For example, using the iconv family of functions
|
conversion. For example, using the iconv family of functions
|
||||||
from the Single Unix Specification (what used to be called
|
from the Single Unix Specification (what used to be called
|
||||||
|
|
@ -215,7 +212,7 @@ mechanism may be required.
|
||||||
Some way to enforce strict type checking on the internal and
|
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. As part of this, the size of the internal and
|
||||||
external types will need to be known.
|
external types will need to be known.
|
||||||
</p></li></ul></div></div><div class="section" title="Other Issues"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"></a>Other Issues</h5></div></div></div><p>
|
</p></li></ul></div></div><div class="section" title="Other Issues"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"/>Other Issues</h5></div></div></div><p>
|
||||||
In addition, multi-threaded and multi-locale environments also impact
|
In addition, multi-threaded and multi-locale environments also impact
|
||||||
the design and requirements for code conversions. In particular, they
|
the design and requirements for code conversions. In particular, they
|
||||||
affect the required specialization codecvt<wchar_t, char, mbstate_t>
|
affect the required specialization codecvt<wchar_t, char, mbstate_t>
|
||||||
|
|
@ -247,7 +244,7 @@ For the required specialization codecvt<wchar_t, char, mbstate_t> ,
|
||||||
conversions are made between the internal character set (always UCS4
|
conversions are made between the internal character set (always UCS4
|
||||||
on GNU/Linux) and whatever the currently selected locale for the
|
on GNU/Linux) and whatever the currently selected locale for the
|
||||||
LC_CTYPE category implements.
|
LC_CTYPE category implements.
|
||||||
</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"></a>Implementation</h4></div></div></div><p>
|
</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"/>Implementation</h4></div></div></div><p>
|
||||||
The two required specializations are implemented as follows:
|
The two required specializations are implemented as follows:
|
||||||
</p><p>
|
</p><p>
|
||||||
<code class="code">
|
<code class="code">
|
||||||
|
|
@ -349,7 +346,7 @@ Definitions for all the required codecvt member functions are provided
|
||||||
for this specialization, and usage of codecvt<internal character type,
|
for this specialization, and usage of codecvt<internal character type,
|
||||||
external character type, encoding_state> is consistent with other
|
external character type, encoding_state> is consistent with other
|
||||||
codecvt usage.
|
codecvt usage.
|
||||||
</p></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"></a>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
|
</p></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"/>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
|
||||||
typedef codecvt_base::result result;
|
typedef codecvt_base::result result;
|
||||||
typedef unsigned short unicode_t;
|
typedef unsigned short unicode_t;
|
||||||
typedef unicode_t int_type;
|
typedef unicode_t int_type;
|
||||||
|
|
@ -386,14 +383,14 @@ codecvt usage.
|
||||||
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
|
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
|
||||||
VERIFY( efrom_next == e_lit + size );
|
VERIFY( efrom_next == e_lit + size );
|
||||||
VERIFY( ito_next == i_arr + size );
|
VERIFY( ito_next == i_arr + size );
|
||||||
</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"/>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
a. things that are sketchy, or remain unimplemented:
|
a. things that are sketchy, or remain unimplemented:
|
||||||
do_encoding, max_length and length member functions
|
do_encoding, max_length and length member functions
|
||||||
are only weakly implemented. I have no idea how to do
|
are only weakly implemented. I have no idea how to do
|
||||||
this correctly, and in a generic manner. Nathan?
|
this correctly, and in a generic manner. Nathan?
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
b. conversions involving std::string
|
b. conversions involving std::string
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
how should operators != and == work for string of
|
how should operators != and == work for string of
|
||||||
different/same encoding?
|
different/same encoding?
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
|
|
@ -403,7 +400,7 @@ codecvt usage.
|
||||||
conversions between narrow, wide, and unicode strings
|
conversions between narrow, wide, and unicode strings
|
||||||
</p></li></ul></div></li><li class="listitem"><p>
|
</p></li></ul></div></li><li class="listitem"><p>
|
||||||
c. conversions involving std::filebuf and std::ostream
|
c. conversions involving std::filebuf and std::ostream
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
how to initialize the state object in a
|
how to initialize the state object in a
|
||||||
standards-conformant manner?
|
standards-conformant manner?
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
|
|
@ -412,58 +409,46 @@ codecvt usage.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
wchar_t/char internal buffers and conversions between
|
wchar_t/char internal buffers and conversions between
|
||||||
internal/external buffers?
|
internal/external buffers?
|
||||||
</p></li></ul></div></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id388454"></a><p><span class="title"><i>
|
</p></li></ul></div></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id480532"/><p><span class="citetitle"><em class="citetitle">
|
||||||
The GNU C Library
|
The GNU C Library
|
||||||
</i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
|
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
|
||||||
Chapters 6 Character Set Handling and 7 Locales and Internationalization
|
Chapters 6 Character Set Handling and 7 Locales and Internationalization
|
||||||
. </span></p></div><div class="biblioentry" title="Correspondence"><a id="id387509"></a><p><span class="title"><i>
|
. </span></p></div><div class="biblioentry"><a id="id480571"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Correspondence
|
Correspondence
|
||||||
</i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id387538"></a><p><span class="title"><i>
|
</em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id480597"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 14882:1998 Programming languages - C++
|
ISO/IEC 14882:1998 Programming languages - C++
|
||||||
</i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id406312"></a><p><span class="title"><i>
|
</em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id480616"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 9899:1999 Programming languages - C
|
ISO/IEC 9899:1999 Programming languages - C
|
||||||
</i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id406331"></a><p><span class="biblioid">
|
</em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id480635"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.opengroup.org/austin" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
||||||
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
</em>. </span><span class="copyright">Copyright © 2008
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="copyright">Copyright © 2008
|
|
||||||
The Open Group/The Institute of Electrical and Electronics
|
The Open Group/The Institute of Electrical and Electronics
|
||||||
Engineers, Inc.
|
Engineers, Inc.
|
||||||
. </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id408136"></a><p><span class="title"><i>
|
. </span></p></div><div class="biblioentry"><a id="id480664"/><p><span class="citetitle"><em class="citetitle">
|
||||||
The C++ Programming Language, Special Edition
|
The C++ Programming Language, Special Edition
|
||||||
</i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley
|
Addison Wesley
|
||||||
. </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id393924"></a><p><span class="title"><i>
|
. </span></span></p></div><div class="biblioentry"><a id="id480703"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Standard C++ IOStreams and Locales
|
Standard C++ IOStreams and Locales
|
||||||
</i>. </span><span class="subtitle">
|
</em>. </span><span class="subtitle">
|
||||||
Advanced Programmer's Guide and Reference
|
Advanced Programmer's Guide and Reference
|
||||||
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley Longman
|
Addison Wesley Longman
|
||||||
. </span></span></p></div><div class="biblioentry"><a id="id446609"></a><p><span class="biblioid">
|
. </span></span></p></div><div class="biblioentry"><a id="id480750"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.lysator.liu.se/c/na1.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
A brief description of Normative Addendum 1
|
||||||
A brief description of Normative Addendum 1
|
</em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="id480780"/><p><span class="biblioid">
|
||||||
</em>
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="id331499"></a><p><span class="biblioid">
|
|
||||||
<a class="ulink" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
|
|
||||||
<em class="citetitle">
|
|
||||||
The Unicode HOWTO
|
The Unicode HOWTO
|
||||||
</em>
|
</em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="id480805"/><p><span class="biblioid">
|
||||||
</a>
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="id331529"></a><p><span class="biblioid">
|
UTF-8 and Unicode FAQ for Unix/Linux
|
||||||
<a class="ulink" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
|
</em>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section" title="messages"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"/>messages</h3></div></div></div><p>
|
||||||
<em class="citetitle">
|
|
||||||
UTF-8 and Unicode FAQ for Unix/Linux
|
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section" title="messages"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"></a>messages</h3></div></div></div><p>
|
|
||||||
The std::messages facet implements message retrieval functionality
|
The std::messages facet implements message retrieval functionality
|
||||||
equivalent to Java's java.text.MessageFormat .using either GNU gettext
|
equivalent to Java's java.text.MessageFormat .using either GNU gettext
|
||||||
or IEEE 1003.1-200 functions.
|
or IEEE 1003.1-200 functions.
|
||||||
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"></a>Requirements</h4></div></div></div><p>
|
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"/>Requirements</h4></div></div></div><p>
|
||||||
The std::messages facet is probably the most vaguely defined facet in
|
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. It's assumed that this facility was built into
|
||||||
the standard library in order to convert string literals from one
|
the standard library in order to convert string literals from one
|
||||||
|
|
@ -512,7 +497,7 @@ be found, returns dfault.
|
||||||
-6- Effects: Releases unspecified resources associated with cat.
|
-6- Effects: Releases unspecified resources associated with cat.
|
||||||
-7- Notes: The limit on such resources, if any, is implementation-defined.
|
-7- Notes: The limit on such resources, if any, is implementation-defined.
|
||||||
</em></span>
|
</em></span>
|
||||||
</p></blockquote></div></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"></a>Design</h4></div></div></div><p>
|
</p></blockquote></div></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"/>Design</h4></div></div></div><p>
|
||||||
A couple of notes on the standard.
|
A couple of notes on the standard.
|
||||||
</p><p>
|
</p><p>
|
||||||
First, why is <code class="code">messages_base::catalog</code> specified as a typedef
|
First, why is <code class="code">messages_base::catalog</code> specified as a typedef
|
||||||
|
|
@ -544,7 +529,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
|
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
|
to be written in English, so translations are always from "en_US" to
|
||||||
other, explicitly named locales.
|
other, explicitly named locales.
|
||||||
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"></a>Implementation</h4></div></div></div><div class="section" title="Models"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"></a>Models</h5></div></div></div><p>
|
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"/>Implementation</h4></div></div></div><div class="section" title="Models"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"/>Models</h5></div></div></div><p>
|
||||||
This is a relatively simple class, on the face of it. The standard
|
This is a relatively simple class, on the face of it. The standard
|
||||||
specifies very little in concrete terms, so generic
|
specifies very little in concrete terms, so generic
|
||||||
implementations that are conforming yet do very little are the
|
implementations that are conforming yet do very little are the
|
||||||
|
|
@ -555,7 +540,7 @@ other, explicitly named locales.
|
||||||
</p><p>
|
</p><p>
|
||||||
Three different mechanisms have been provided, selectable via
|
Three different mechanisms have been provided, selectable via
|
||||||
configure flags:
|
configure flags:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
generic
|
generic
|
||||||
</p><p>
|
</p><p>
|
||||||
This model does very little, and is what is used by default.
|
This model does very little, and is what is used by default.
|
||||||
|
|
@ -585,7 +570,7 @@ A new, standards-conformant non-virtual member function signature was
|
||||||
added for 'open' so that a directory could be specified with a given
|
added for 'open' so that a directory could be specified with a given
|
||||||
message catalog. This simplifies calling conventions for the gnu
|
message catalog. This simplifies calling conventions for the gnu
|
||||||
model.
|
model.
|
||||||
</p></div><div class="section" title="The GNU Model"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"></a>The GNU Model</h5></div></div></div><p>
|
</p></div><div class="section" title="The GNU Model"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"/>The GNU Model</h5></div></div></div><p>
|
||||||
The messages facet, because it is retrieving and converting
|
The messages facet, because it is retrieving and converting
|
||||||
between characters sets, depends on the ctype and perhaps the
|
between characters sets, depends on the ctype and perhaps the
|
||||||
codecvt facet in a given locale. In addition, underlying "C"
|
codecvt facet in a given locale. In addition, underlying "C"
|
||||||
|
|
@ -597,7 +582,7 @@ model.
|
||||||
Making the message catalogs can be initially tricky, but become
|
Making the message catalogs can be initially tricky, but become
|
||||||
quite simple with practice. For complete info, see the gettext
|
quite simple with practice. For complete info, see the gettext
|
||||||
documentation. Here's an idea of what is required:
|
documentation. Here's an idea of what is required:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Make a source file with the required string literals that need
|
Make a source file with the required string literals that need
|
||||||
to be translated. See <code class="code">intl/string_literals.cc</code> for
|
to be translated. See <code class="code">intl/string_literals.cc</code> for
|
||||||
an example.
|
an example.
|
||||||
|
|
@ -628,7 +613,7 @@ model.
|
||||||
<code class="code">
|
<code class="code">
|
||||||
use_facet<messages<char> >(loc_de).open("libstdc++", locale(), dir);
|
use_facet<messages<char> >(loc_de).open("libstdc++", locale(), dir);
|
||||||
</code>
|
</code>
|
||||||
</p></li></ul></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"></a>Use</h4></div></div></div><p>
|
</p></li></ul></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"/>Use</h4></div></div></div><p>
|
||||||
A simple example using the GNU model of message conversion.
|
A simple example using the GNU model of message conversion.
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
@ -650,9 +635,9 @@ void test01()
|
||||||
cout << "thank you in german:" << s02 << '\n';
|
cout << "thank you in german:" << s02 << '\n';
|
||||||
mssg_de.close(cat_de);
|
mssg_de.close(cat_de);
|
||||||
}
|
}
|
||||||
</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"/>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Things that are sketchy, or remain unimplemented:
|
Things that are sketchy, or remain unimplemented:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
_M_convert_from_char, _M_convert_to_char are in flux,
|
_M_convert_from_char, _M_convert_to_char are in flux,
|
||||||
depending on how the library ends up doing character set
|
depending on how the library ends up doing character set
|
||||||
conversions. It might not be possible to do a real character
|
conversions. It might not be possible to do a real character
|
||||||
|
|
@ -700,53 +685,44 @@ void test01()
|
||||||
model. As of this writing, it is unknown how to query to see
|
model. As of this writing, it is unknown how to query to see
|
||||||
if a specified message catalog exists using the gettext
|
if a specified message catalog exists using the gettext
|
||||||
package.
|
package.
|
||||||
</p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id504136"></a><p><span class="title"><i>
|
</p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id481479"/><p><span class="citetitle"><em class="citetitle">
|
||||||
The GNU C Library
|
The GNU C Library
|
||||||
</i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
|
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
|
||||||
. </span></p></div><div class="biblioentry" title="Correspondence"><a id="id416147"></a><p><span class="title"><i>
|
. </span></p></div><div class="biblioentry"><a id="id481519"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Correspondence
|
Correspondence
|
||||||
</i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id416175"></a><p><span class="title"><i>
|
</em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id481544"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 14882:1998 Programming languages - C++
|
ISO/IEC 14882:1998 Programming languages - C++
|
||||||
</i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id456221"></a><p><span class="title"><i>
|
</em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id481564"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 9899:1999 Programming languages - C
|
ISO/IEC 9899:1999 Programming languages - C
|
||||||
</i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id456239"></a><p><span class="biblioid">
|
</em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id481582"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.opengroup.org/austin" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
||||||
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
</em>. </span><span class="copyright">Copyright © 2008
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="copyright">Copyright © 2008
|
|
||||||
The Open Group/The Institute of Electrical and Electronics
|
The Open Group/The Institute of Electrical and Electronics
|
||||||
Engineers, Inc.
|
Engineers, Inc.
|
||||||
. </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id445827"></a><p><span class="title"><i>
|
. </span></p></div><div class="biblioentry"><a id="id481612"/><p><span class="citetitle"><em class="citetitle">
|
||||||
The C++ Programming Language, Special Edition
|
The C++ Programming Language, Special Edition
|
||||||
</i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley
|
Addison Wesley
|
||||||
. </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id455920"></a><p><span class="title"><i>
|
. </span></span></p></div><div class="biblioentry"><a id="id481650"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Standard C++ IOStreams and Locales
|
Standard C++ IOStreams and Locales
|
||||||
</i>. </span><span class="subtitle">
|
</em>. </span><span class="subtitle">
|
||||||
Advanced Programmer's Guide and Reference
|
Advanced Programmer's Guide and Reference
|
||||||
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley Longman
|
Addison Wesley Longman
|
||||||
. </span></span></p></div><div class="biblioentry"><a id="id467395"></a><p><span class="biblioid">
|
. </span></span></p></div><div class="biblioentry"><a id="id481698"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://java.sun.com/reference/api/index.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
API Specifications, Java Platform
|
||||||
API Specifications, Java Platform
|
</em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
|
|
||||||
java.util.Locale, java.util.ResourceBundle
|
java.util.Locale, java.util.ResourceBundle
|
||||||
. </span></p></div><div class="biblioentry"><a id="id467417"></a><p><span class="biblioid">
|
. </span></p></div><div class="biblioentry"><a id="id481719"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.gnu.org/software/gettext/" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
GNU gettext tools, version 0.10.38, Native Language Support
|
||||||
GNU gettext tools, version 0.10.38, Native Language Support
|
Library and Tools.
|
||||||
Library and Tools.
|
</em>. </span></p></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="localization.html">Prev</a> </td><td align="center"><a accesskey="u" href="localization.html">Up</a></td><td align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 8.
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="localization.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8.
|
|
||||||
Localization
|
Localization
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9.
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 9.
|
||||||
Containers
|
Containers
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="io.html" title="Chapter 13. Input and Output"/><link rel="prev" href="stringstreams.html" title="Memory Based Streams"/><link rel="next" href="io_and_c.html" title="Interacting with C"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
|
||||||
Input and Output
|
Input and Output
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="File Based Streams"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.filestreams"></a>File Based Streams</h2></div></div></div><div class="sect2" title="Copying a File"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"></a>Copying a File</h3></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr/></div><div class="section" title="File Based Streams"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.filestreams"/>File Based Streams</h2></div></div></div><div class="section" title="Copying a File"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"/>Copying a File</h3></div></div></div><p>
|
||||||
</p><p>So you want to copy a file quickly and easily, and most important,
|
</p><p>So you want to copy a file quickly and easily, and most important,
|
||||||
completely portably. And since this is C++, you have an open
|
completely portably. And since this is C++, you have an open
|
||||||
ifstream (call it IN) and an open ofstream (call it OUT):
|
ifstream (call it IN) and an open ofstream (call it OUT):
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
The operators shown above are all defined in the parent
|
The operators shown above are all defined in the parent
|
||||||
basic_ostream class and are therefore available with all possible
|
basic_ostream class and are therefore available with all possible
|
||||||
descendants.
|
descendants.
|
||||||
</p></div><div class="sect2" title="Binary Input and Output"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"></a>Binary Input and Output</h3></div></div></div><p>
|
</p></div><div class="section" title="Binary Input and Output"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"/>Binary Input and Output</h3></div></div></div><p>
|
||||||
</p><p>The first and most important thing to remember about binary I/O is
|
</p><p>The first and most important thing to remember about binary I/O is
|
||||||
that opening a file with <code class="code">ios::binary</code> is not, repeat
|
that opening a file with <code class="code">ios::binary</code> is not, repeat
|
||||||
<span class="emphasis"><em>not</em></span>, the only thing you have to do. It is not a silver
|
<span class="emphasis"><em>not</em></span>, the only thing you have to do. It is not a silver
|
||||||
|
|
@ -87,7 +87,7 @@
|
||||||
of <span class="emphasis"><em>formatting</em></span> functions and classes to perform something
|
of <span class="emphasis"><em>formatting</em></span> functions and classes to perform something
|
||||||
which <span class="emphasis"><em>requires</em></span> that formatting not be done? There are a
|
which <span class="emphasis"><em>requires</em></span> that formatting not be done? There are a
|
||||||
seemingly infinite number of solutions, and a few are listed here:
|
seemingly infinite number of solutions, and a few are listed here:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
|
||||||
<</>> operators to do binary I/O on whatever data
|
<</>> operators to do binary I/O on whatever data
|
||||||
types you're using.</span>”</span>
|
types you're using.</span>”</span>
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -138,7 +138,7 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
An instructive thread from comp.lang.c++.moderated delved off into
|
An instructive thread from comp.lang.c++.moderated delved off into
|
||||||
this topic starting more or less at
|
this topic starting more or less at
|
||||||
<a class="ulink" href="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d" target="_top">this</a>
|
<a class="link" href="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d">this</a>
|
||||||
post and continuing to the end of the thread. (The subject heading is "binary iostreams" on both comp.std.c++
|
post and continuing to the end of the thread. (The subject heading is "binary iostreams" on both comp.std.c++
|
||||||
and comp.lang.c++.moderated.) Take special note of the replies by James Kanze and Dietmar Kühl.
|
and comp.lang.c++.moderated.) Take special note of the replies by James Kanze and Dietmar Kühl.
|
||||||
</p><p>Briefly, the problems of byte ordering and type sizes mean that
|
</p><p>Briefly, the problems of byte ordering and type sizes mean that
|
||||||
|
|
@ -147,4 +147,4 @@
|
||||||
between arbitrary programs, or across a network, or from one
|
between arbitrary programs, or across a network, or from one
|
||||||
invocation of a program to another invocation of the same program
|
invocation of a program to another invocation of the same program
|
||||||
on a different platform, etc.
|
on a different platform, etc.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td align="center"><a accesskey="u" href="io.html">Up</a></td><td align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td align="left" valign="top">Memory Based Streams </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="numerics.html" title="Chapter 12. Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12. Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="numerics.html" title="Chapter 12. Numerics"/><link rel="prev" href="numerics.html" title="Chapter 12. Numerics"/><link rel="next" href="numerics_and_c.html" title="Interacting with C"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12.
|
||||||
Numerics
|
Numerics
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Generalized Operations"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.generalized_ops"></a>Generalized Operations</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr/></div><div class="section" title="Generalized Operations"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics.generalized_ops"/>Generalized Operations</h2></div></div></div><p>
|
||||||
</p><p>There are four generalized functions in the <numeric> header
|
</p><p>There are four generalized functions in the <numeric> header
|
||||||
that follow the same conventions as those in <algorithm>. Each
|
that follow the same conventions as those in <algorithm>. Each
|
||||||
of them is overloaded: one signature for common default operations,
|
of them is overloaded: one signature for common default operations,
|
||||||
and a second for fully general operations. Their names are
|
and a second for fully general operations. Their names are
|
||||||
self-explanatory to anyone who works with numerics on a regular basis:
|
self-explanatory to anyone who works with numerics on a regular basis:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
int ar[50];
|
int ar[50];
|
||||||
int someval = somefunction();
|
int someval = somefunction();
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
and multiplies all the members of the array; here we must obviously
|
and multiplies all the members of the array; here we must obviously
|
||||||
use 1 as a starting value instead of 0.
|
use 1 as a starting value instead of 0.
|
||||||
</p><p>The other three functions have similar dual-signature forms.
|
</p><p>The other three functions have similar dual-signature forms.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 12.
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><td align="center"><a accesskey="u" href="numerics.html">Up</a></td><td align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 12.
|
||||||
Numerics
|
Numerics
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , internals " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , internals "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"/><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation"/><link rel="next" href="test.html" title="Test"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
||||||
Porting and Maintenance
|
Porting and Maintenance
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Porting to New Hardware or Operating Systems"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.internals"></a>Porting to New Hardware or Operating Systems</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr/></div><div class="section" title="Porting to New Hardware or Operating Systems"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting.internals"/>Porting to New Hardware or Operating Systems</h2></div></div></div><p>
|
||||||
</p><p>This document explains how to port libstdc++ (the GNU C++ library) to
|
</p><p>This document explains how to port libstdc++ (the GNU C++ library) to
|
||||||
a new target.
|
a new target.
|
||||||
</p><p>In order to make the GNU C++ library (libstdc++) work with a new
|
</p><p>In order to make the GNU C++ library (libstdc++) work with a new
|
||||||
|
|
@ -20,7 +20,7 @@ works. It is difficult to test the C++ compiler without a working
|
||||||
library, but you should at least try some minimal test cases.
|
library, but you should at least try some minimal test cases.
|
||||||
</p><p>(Note that what we think of as a "target," the library refers to as
|
</p><p>(Note that what we think of as a "target," the library refers to as
|
||||||
a "host." The comment at the top of <code class="code">configure.ac</code> explains why.)
|
a "host." The comment at the top of <code class="code">configure.ac</code> explains why.)
|
||||||
</p><div class="sect2" title="Operating System"><div class="titlepage"><div><div><h3 class="title"><a id="internals.os"></a>Operating System</h3></div></div></div><p>If you are porting to a new operating system (as opposed to a new chip
|
</p><div class="section" title="Operating System"><div class="titlepage"><div><div><h3 class="title"><a id="internals.os"/>Operating System</h3></div></div></div><p>If you are porting to a new operating system (as opposed to a new chip
|
||||||
using an existing operating system), you will need to create a new
|
using an existing operating system), you will need to create a new
|
||||||
directory in the <code class="code">config/os</code> hierarchy. For example, the IRIX
|
directory in the <code class="code">config/os</code> hierarchy. For example, the IRIX
|
||||||
configuration files are all in <code class="code">config/os/irix</code>. There is no set
|
configuration files are all in <code class="code">config/os/irix</code>. There is no set
|
||||||
|
|
@ -99,7 +99,7 @@ this:
|
||||||
#endif
|
#endif
|
||||||
</pre><p>We recommend copying an existing <code class="code">os_defines.h</code> to use as a
|
</pre><p>We recommend copying an existing <code class="code">os_defines.h</code> to use as a
|
||||||
starting point.
|
starting point.
|
||||||
</p></div><div class="sect2" title="CPU"><div class="titlepage"><div><div><h3 class="title"><a id="internals.cpu"></a>CPU</h3></div></div></div><p>If you are porting to a new chip (as opposed to a new operating system
|
</p></div><div class="section" title="CPU"><div class="titlepage"><div><div><h3 class="title"><a id="internals.cpu"/>CPU</h3></div></div></div><p>If you are porting to a new chip (as opposed to a new operating system
|
||||||
running on an existing chip), you will need to create a new directory in the
|
running on an existing chip), you will need to create a new directory in the
|
||||||
<code class="code">config/cpu</code> hierarchy. Much like the <a class="link" href="internals.html#internals.os" title="Operating System">Operating system</a> setup,
|
<code class="code">config/cpu</code> hierarchy. Much like the <a class="link" href="internals.html#internals.os" title="Operating System">Operating system</a> setup,
|
||||||
there are no strict rules on how to organize the CPU configuration
|
there are no strict rules on how to organize the CPU configuration
|
||||||
|
|
@ -117,7 +117,7 @@ example, <code class="code">alpha</code>, <code class="code">alphaev5</code>, an
|
||||||
</p><p>The <code class="code">cpu_include_dir</code> sets default locations for the files controlling
|
</p><p>The <code class="code">cpu_include_dir</code> sets default locations for the files controlling
|
||||||
<a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">Thread safety</a> and <a class="link" href="internals.html#internals.numeric_limits" title="Numeric Limits">Numeric limits</a>, if the defaults are not
|
<a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">Thread safety</a> and <a class="link" href="internals.html#internals.numeric_limits" title="Numeric Limits">Numeric limits</a>, if the defaults are not
|
||||||
appropriate for your chip.
|
appropriate for your chip.
|
||||||
</p></div><div class="sect2" title="Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="internals.char_types"></a>Character Types</h3></div></div></div><p>The library requires that you provide three header files to implement
|
</p></div><div class="section" title="Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="internals.char_types"/>Character Types</h3></div></div></div><p>The library requires that you provide three header files to implement
|
||||||
character classification, analogous to that provided by the C libraries
|
character classification, analogous to that provided by the C libraries
|
||||||
<code class="code"><ctype.h></code> header. You can model these on the files provided in
|
<code class="code"><ctype.h></code> header. You can model these on the files provided in
|
||||||
<code class="code">config/os/generic</code>. However, these files will almost
|
<code class="code">config/os/generic</code>. However, these files will almost
|
||||||
|
|
@ -279,7 +279,7 @@ from <code class="code">__low</code> up until <code class="code">__high</code> i
|
||||||
++__low;
|
++__low;
|
||||||
return __low;
|
return __low;
|
||||||
}
|
}
|
||||||
</pre></div><div class="sect2" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"></a>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
|
</pre></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"/>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
|
||||||
operations to provide thread-safety. If you don't take any special
|
operations to provide thread-safety. If you don't take any special
|
||||||
action, the library will use stub versions of these functions that are
|
action, the library will use stub versions of these functions that are
|
||||||
not thread-safe. They will work fine, unless your applications are
|
not thread-safe. They will work fine, unless your applications are
|
||||||
|
|
@ -334,7 +334,7 @@ must be equivalent to those provided here, but using atomic operations:
|
||||||
{
|
{
|
||||||
*__mem += __val;
|
*__mem += __val;
|
||||||
}
|
}
|
||||||
</pre></div><div class="sect2" title="Numeric Limits"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"></a>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
|
</pre></div><div class="section" title="Numeric Limits"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"/>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
|
||||||
such as the minimum and maximum representable values of each type.
|
such as the minimum and maximum representable values of each type.
|
||||||
You can define each of these values individually, but it is usually
|
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
|
easiest just to indicate how many bits are used in each of the data
|
||||||
|
|
@ -346,7 +346,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.
|
do not have to provide the same definitions for each operating system.
|
||||||
To take that approach, create a new file called <code class="code">cpu_limits.h</code> in
|
To take that approach, create a new file called <code class="code">cpu_limits.h</code> in
|
||||||
your CPU configuration directory (see <a class="link" href="internals.html#internals.cpu" title="CPU">CPU</a>).
|
your CPU configuration directory (see <a class="link" href="internals.html#internals.cpu" title="CPU">CPU</a>).
|
||||||
</p></div><div class="sect2" title="Libtool"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"></a>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
|
</p></div><div class="section" title="Libtool"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"/>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
|
||||||
Explaining the full workings of libtool is beyond the scope of this
|
Explaining the full workings of libtool is beyond the scope of this
|
||||||
document, but there are a few, particular bits that are necessary for
|
document, but there are a few, particular bits that are necessary for
|
||||||
porting.
|
porting.
|
||||||
|
|
@ -368,7 +368,4 @@ do this is to build the library using <code class="code">gcc -shared</code>.
|
||||||
<code class="code">ltcf-c.sh</code> in the top-level directory. Find the switch statement
|
<code class="code">ltcf-c.sh</code> in the top-level directory. Find the switch statement
|
||||||
that sets <code class="code">archive_cmds</code>. Here, adjust the setting for your
|
that sets <code class="code">archive_cmds</code>. Here, adjust the setting for your
|
||||||
operating system.
|
operating system.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix B.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td align="left" valign="top">Writing and Generating Documentation </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Test</td></tr></table></div></body></html>
|
||||||
Porting and Maintenance
|
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Test</td></tr></table></div></body></html>
|
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13. Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 13. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="numerics_and_c.html" title="Interacting with C"/><link rel="next" href="streambufs.html" title="Stream Buffers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13.
|
||||||
Input and Output
|
Input and Output
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 13. Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13.
|
</th><td align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 13. Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"/>Chapter 13.
|
||||||
Input and Output
|
Input and Output
|
||||||
<a id="id404072" class="indexterm"></a>
|
<a id="id483497" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="sect1"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="sect2"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect2"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="sect1"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="sect1"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="sect1"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect2"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="sect1" title="Iostream Objects"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section" title="Iostream Objects"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.objects"/>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
|
||||||
only include the headers you really need. Many people simply include
|
only include the headers you really need. Many people simply include
|
||||||
<iostream> when they don't need to -- and that can <span class="emphasis"><em>penalize
|
<iostream> when they don't need to -- and that can <span class="emphasis"><em>penalize
|
||||||
your runtime as well.</em></span> Here are some tips on which header to use
|
your runtime as well.</em></span> Here are some tips on which header to use
|
||||||
|
|
@ -118,4 +118,4 @@
|
||||||
the standard objects in that source file; you'll pay less startup
|
the standard objects in that source file; you'll pay less startup
|
||||||
time. Only include the header files you need to in general; your
|
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.
|
compile times will go down when there's less parsing work to do.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td align="left" valign="top">Interacting with C </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14. Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="io.html" title="Chapter 13. Input and Output"/><link rel="prev" href="fstreams.html" title="File Based Streams"/><link rel="next" href="atomics.html" title="Chapter 14. Atomics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
|
||||||
Input and Output
|
Input and Output
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.c"></a>Interacting with C</h2></div></div></div><div class="sect2" title="Using FILE* and file descriptors"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"></a>Using FILE* and file descriptors</h3></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr/></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.c"/>Interacting with C</h2></div></div></div><div class="section" title="Using FILE* and file descriptors"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"/>Using FILE* and file descriptors</h3></div></div></div><p>
|
||||||
See the <a class="link" href="ext_io.html" title="Chapter 26. Input and Output">extensions</a> for using
|
See the <a class="link" href="ext_io.html" title="Chapter 26. Input and Output">extensions</a> for using
|
||||||
<span class="type">FILE</span> and <span class="type">file descriptors</span> with
|
<span class="type">FILE</span> and <span class="type">file descriptors</span> with
|
||||||
<code class="classname">ofstream</code> and
|
<code class="classname">ofstream</code> and
|
||||||
<code class="classname">ifstream</code>.
|
<code class="classname">ifstream</code>.
|
||||||
</p></div><div class="sect2" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"></a>Performance</h3></div></div></div><p>
|
</p></div><div class="section" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"/>Performance</h3></div></div></div><p>
|
||||||
Pathetic Performance? Ditch C.
|
Pathetic Performance? Ditch C.
|
||||||
</p><p>It sounds like a flame on C, but it isn't. Really. Calm down.
|
</p><p>It sounds like a flame on C, but it isn't. Really. Calm down.
|
||||||
I'm just saying it to get your attention.
|
I'm just saying it to get your attention.
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
<code class="code">clog</code>, and their wide-character counterchapters). File stream
|
<code class="code">clog</code>, and their wide-character counterchapters). File stream
|
||||||
objects that you declare yourself have no such requirement and are fully
|
objects that you declare yourself have no such requirement and are fully
|
||||||
buffered.
|
buffered.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">File Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><td align="center"><a accesskey="u" href="io.html">Up</a></td><td align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr><tr><td align="left" valign="top">File Based Streams </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 14.
|
||||||
Atomics
|
Atomics
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10. Iterators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 10. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="containers_and_c.html" title="Interacting with C"/><link rel="next" href="algorithms.html" title="Chapter 11. Algorithms"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10.
|
||||||
Iterators
|
Iterators
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 10. Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10.
|
</th><td align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 10. Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"/>Chapter 10.
|
||||||
Iterators
|
Iterators
|
||||||
<a id="id376166" class="indexterm"></a>
|
<a id="id482663" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="sect2"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect2"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="sect1" title="Predefined"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="sect2" title="Iterators vs. Pointers"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section" title="Predefined"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators.predefined"/>Predefined</h2></div></div></div><div class="section" title="Iterators vs. Pointers"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"/>Iterators vs. Pointers</h3></div></div></div><p>
|
||||||
The following
|
The following
|
||||||
FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
|
FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
|
||||||
iterators are not implemented as pointers. They are a generalization
|
iterators are not implemented as pointers. They are a generalization
|
||||||
|
|
@ -44,7 +44,7 @@ classes.
|
||||||
down through inheritance, so while the compiler has to do work
|
down through inheritance, so while the compiler has to do work
|
||||||
looking up all the names, your runtime code does not. (This has
|
looking up all the names, your runtime code does not. (This has
|
||||||
been a prime concern from the beginning.)
|
been a prime concern from the beginning.)
|
||||||
</p></div><div class="sect2" title="One Past the End"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"></a>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
|
</p></div><div class="section" title="One Past the End"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"/>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
|
||||||
especially towards the end. Trust me.
|
especially towards the end. Trust me.
|
||||||
</p><p>Beginners usually have a little trouble understand the whole
|
</p><p>Beginners usually have a little trouble understand the whole
|
||||||
'past-the-end' thing, until they remember their early algebra classes
|
'past-the-end' thing, until they remember their early algebra classes
|
||||||
|
|
@ -53,7 +53,7 @@ classes.
|
||||||
</p><p>First, some history, and a reminder of some of the funkier rules in
|
</p><p>First, some history, and a reminder of some of the funkier rules in
|
||||||
C and C++ for builtin arrays. The following rules have always been
|
C and C++ for builtin arrays. The following rules have always been
|
||||||
true for both languages:
|
true for both languages:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>You can point anywhere in the array, <span class="emphasis"><em>or to the first element
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>You can point anywhere in the array, <span class="emphasis"><em>or to the first element
|
||||||
past the end of the array</em></span>. A pointer that points to one
|
past the end of the array</em></span>. A pointer that points to one
|
||||||
past the end of the array is guaranteed to be as unique as a
|
past the end of the array is guaranteed to be as unique as a
|
||||||
pointer to somewhere inside the array, so that you can compare
|
pointer to somewhere inside the array, so that you can compare
|
||||||
|
|
@ -124,7 +124,7 @@ classes.
|
||||||
sequences very simple to recognize: if the two endpoints compare
|
sequences very simple to recognize: if the two endpoints compare
|
||||||
equal, then the {array, sequence, container, whatever} is empty.
|
equal, then the {array, sequence, container, whatever} is empty.
|
||||||
</p><p>Just don't dereference <code class="code">end()</code>.
|
</p><p>Just don't dereference <code class="code">end()</code>.
|
||||||
</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 11.
|
</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr><tr><td align="left" valign="top">Interacting with C </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 11.
|
||||||
Algorithms
|
Algorithms
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,93 +1,93 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="License"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="status.html" title="Chapter 1. Status"/><link rel="prev" href="status.html" title="Chapter 1. Status"/><link rel="next" href="bugs.html" title="Bugs"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr/></div><div class="section" title="License"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status.license"/>License</h2></div></div></div><p>
|
||||||
There are two licenses affecting GNU libstdc++: one for the code,
|
There are two licenses affecting GNU libstdc++: one for the code,
|
||||||
and one for the documentation.
|
and one for the documentation.
|
||||||
</p><p>
|
</p><p>
|
||||||
There is a license section in the FAQ regarding common <a class="link" href="../faq.html#faq.license" title="License">questions</a>. If you have more
|
There is a license section in the FAQ regarding common <a class="link" href="../faq.html#faq.license">questions</a>. If you have more
|
||||||
questions, ask the FSF or the <a class="ulink" href="http://gcc.gnu.org/lists.html" target="_top">gcc mailing list</a>.
|
questions, ask the FSF or the <a class="link" href="http://gcc.gnu.org/lists.html">gcc mailing list</a>.
|
||||||
</p><div class="sect2" title="The Code: GPL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.gpl"></a>The Code: GPL</h3></div></div></div><p>
|
</p><div class="section" title="The Code: GPL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.gpl"/>The Code: GPL</h3></div></div></div><p>
|
||||||
The source code is distributed under the <a class="link" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3">GNU General Public License version 3</a>,
|
The source code is distributed under the <a class="link" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3">GNU General Public License version 3</a>,
|
||||||
with the addition under section 7 of an exception described in
|
with the addition under section 7 of an exception described in
|
||||||
the <span class="quote">“<span class="quote">GCC Runtime Library Exception, version 3.1</span>”</span>
|
the <span class="quote">“<span class="quote">GCC Runtime Library Exception, version 3.1</span>”</span>
|
||||||
as follows (or see the file COPYING.RUNTIME):
|
as follows (or see the file COPYING.RUNTIME):
|
||||||
</p><div class="literallayout"><p><br />
|
</p><div class="literallayout"><p><br/>
|
||||||
GCC RUNTIME LIBRARY EXCEPTION<br />
|
GCC RUNTIME LIBRARY EXCEPTION<br/>
|
||||||
<br />
|
<br/>
|
||||||
Version 3.1, 31 March 2009<br />
|
Version 3.1, 31 March 2009<br/>
|
||||||
<br />
|
<br/>
|
||||||
Copyright (C) 2009 <a class="ulink" href="http://www.fsf.org" target="_top">Free Software Foundation, Inc.</a><br />
|
Copyright (C) 2009 <a class="link" href="http://www.fsf.org">Free Software Foundation, Inc.</a><br/>
|
||||||
<br />
|
<br/>
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this<br />
|
Everyone is permitted to copy and distribute verbatim copies of this<br/>
|
||||||
license document, but changing it is not allowed.<br />
|
license document, but changing it is not allowed.<br/>
|
||||||
<br />
|
<br/>
|
||||||
This GCC Runtime Library Exception ("Exception") is an additional<br />
|
This GCC Runtime Library Exception ("Exception") is an additional<br/>
|
||||||
permission under section 7 of the GNU General Public License, version<br />
|
permission under section 7 of the GNU General Public License, version<br/>
|
||||||
3 ("GPLv3"). It applies to a given file (the "Runtime Library") that<br />
|
3 ("GPLv3"). It applies to a given file (the "Runtime Library") that<br/>
|
||||||
bears a notice placed by the copyright holder of the file stating that<br />
|
bears a notice placed by the copyright holder of the file stating that<br/>
|
||||||
the file is governed by GPLv3 along with this Exception.<br />
|
the file is governed by GPLv3 along with this Exception.<br/>
|
||||||
<br />
|
<br/>
|
||||||
When you use GCC to compile a program, GCC may combine portions of<br />
|
When you use GCC to compile a program, GCC may combine portions of<br/>
|
||||||
certain GCC header files and runtime libraries with the compiled<br />
|
certain GCC header files and runtime libraries with the compiled<br/>
|
||||||
program. The purpose of this Exception is to allow compilation of<br />
|
program. The purpose of this Exception is to allow compilation of<br/>
|
||||||
non-GPL (including proprietary) programs to use, in this way, the<br />
|
non-GPL (including proprietary) programs to use, in this way, the<br/>
|
||||||
header files and runtime libraries covered by this Exception.<br />
|
header files and runtime libraries covered by this Exception.<br/>
|
||||||
<br />
|
<br/>
|
||||||
0. Definitions.<br />
|
0. Definitions.<br/>
|
||||||
<br />
|
<br/>
|
||||||
A file is an "Independent Module" if it either requires the Runtime<br />
|
A file is an "Independent Module" if it either requires the Runtime<br/>
|
||||||
Library for execution after a Compilation Process, or makes use of an<br />
|
Library for execution after a Compilation Process, or makes use of an<br/>
|
||||||
interface provided by the Runtime Library, but is not otherwise based<br />
|
interface provided by the Runtime Library, but is not otherwise based<br/>
|
||||||
on the Runtime Library.<br />
|
on the Runtime Library.<br/>
|
||||||
<br />
|
<br/>
|
||||||
"GCC" means a version of the GNU Compiler Collection, with or without<br />
|
"GCC" means a version of the GNU Compiler Collection, with or without<br/>
|
||||||
modifications, governed by version 3 (or a specified later version) of<br />
|
modifications, governed by version 3 (or a specified later version) of<br/>
|
||||||
the GNU General Public License (GPL) with the option of using any<br />
|
the GNU General Public License (GPL) with the option of using any<br/>
|
||||||
subsequent versions published by the FSF.<br />
|
subsequent versions published by the FSF.<br/>
|
||||||
<br />
|
<br/>
|
||||||
"GPL-compatible Software" is software whose conditions of propagation,<br />
|
"GPL-compatible Software" is software whose conditions of propagation,<br/>
|
||||||
modification and use would permit combination with GCC in accord with<br />
|
modification and use would permit combination with GCC in accord with<br/>
|
||||||
the license of GCC.<br />
|
the license of GCC.<br/>
|
||||||
<br />
|
<br/>
|
||||||
"Target Code" refers to output from any compiler for a real or virtual<br />
|
"Target Code" refers to output from any compiler for a real or virtual<br/>
|
||||||
target processor architecture, in executable form or suitable for<br />
|
target processor architecture, in executable form or suitable for<br/>
|
||||||
input to an assembler, loader, linker and/or execution<br />
|
input to an assembler, loader, linker and/or execution<br/>
|
||||||
phase. Notwithstanding that, Target Code does not include data in any<br />
|
phase. Notwithstanding that, Target Code does not include data in any<br/>
|
||||||
format that is used as a compiler intermediate representation, or used<br />
|
format that is used as a compiler intermediate representation, or used<br/>
|
||||||
for producing a compiler intermediate representation.<br />
|
for producing a compiler intermediate representation.<br/>
|
||||||
<br />
|
<br/>
|
||||||
The "Compilation Process" transforms code entirely represented in<br />
|
The "Compilation Process" transforms code entirely represented in<br/>
|
||||||
non-intermediate languages designed for human-written code, and/or in<br />
|
non-intermediate languages designed for human-written code, and/or in<br/>
|
||||||
Java Virtual Machine byte code, into Target Code. Thus, for example,<br />
|
Java Virtual Machine byte code, into Target Code. Thus, for example,<br/>
|
||||||
use of source code generators and preprocessors need not be considered<br />
|
use of source code generators and preprocessors need not be considered<br/>
|
||||||
part of the Compilation Process, since the Compilation Process can be<br />
|
part of the Compilation Process, since the Compilation Process can be<br/>
|
||||||
understood as starting with the output of the generators or<br />
|
understood as starting with the output of the generators or<br/>
|
||||||
preprocessors.<br />
|
preprocessors.<br/>
|
||||||
<br />
|
<br/>
|
||||||
A Compilation Process is "Eligible" if it is done using GCC, alone or<br />
|
A Compilation Process is "Eligible" if it is done using GCC, alone or<br/>
|
||||||
with other GPL-compatible software, or if it is done without using any<br />
|
with other GPL-compatible software, or if it is done without using any<br/>
|
||||||
work based on GCC. For example, using non-GPL-compatible Software to<br />
|
work based on GCC. For example, using non-GPL-compatible Software to<br/>
|
||||||
optimize any GCC intermediate representations would not qualify as an<br />
|
optimize any GCC intermediate representations would not qualify as an<br/>
|
||||||
Eligible Compilation Process.<br />
|
Eligible Compilation Process.<br/>
|
||||||
<br />
|
<br/>
|
||||||
1. Grant of Additional Permission.<br />
|
1. Grant of Additional Permission.<br/>
|
||||||
<br />
|
<br/>
|
||||||
You have permission to propagate a work of Target Code formed by<br />
|
You have permission to propagate a work of Target Code formed by<br/>
|
||||||
combining the Runtime Library with Independent Modules, even if such<br />
|
combining the Runtime Library with Independent Modules, even if such<br/>
|
||||||
propagation would otherwise violate the terms of GPLv3, provided that<br />
|
propagation would otherwise violate the terms of GPLv3, provided that<br/>
|
||||||
all Target Code was generated by Eligible Compilation Processes. You<br />
|
all Target Code was generated by Eligible Compilation Processes. You<br/>
|
||||||
may then convey such a combination under terms of your choice,<br />
|
may then convey such a combination under terms of your choice,<br/>
|
||||||
consistent with the licensing of the Independent Modules.<br />
|
consistent with the licensing of the Independent Modules.<br/>
|
||||||
<br />
|
<br/>
|
||||||
2. No Weakening of GCC Copyleft.<br />
|
2. No Weakening of GCC Copyleft.<br/>
|
||||||
<br />
|
<br/>
|
||||||
The availability of this Exception does not imply any general<br />
|
The availability of this Exception does not imply any general<br/>
|
||||||
presumption that third-party software is unaffected by the copyleft<br />
|
presumption that third-party software is unaffected by the copyleft<br/>
|
||||||
requirements of the license of GCC.<br />
|
requirements of the license of GCC.<br/>
|
||||||
</p></div><p>
|
</p></div><p>
|
||||||
Hopefully that text is self-explanatory. If it isn't, you need to speak
|
Hopefully that text is self-explanatory. If it isn't, you need to speak
|
||||||
to your lawyer, or the Free Software Foundation.
|
to your lawyer, or the Free Software Foundation.
|
||||||
</p></div><div class="sect2" title="The Documentation: GPL, FDL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.fdl"></a>The Documentation: GPL, FDL</h3></div></div></div><p>
|
</p></div><div class="section" title="The Documentation: GPL, FDL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.fdl"/>The Documentation: GPL, FDL</h3></div></div></div><p>
|
||||||
The documentation shipped with the library and made available over
|
The documentation shipped with the library and made available over
|
||||||
the web, excluding the pages generated from source comments, are
|
the web, excluding the pages generated from source comments, are
|
||||||
copyrighted by the Free Software Foundation, and placed under the
|
copyrighted by the Free Software Foundation, and placed under the
|
||||||
|
|
@ -102,4 +102,4 @@ requirements of the license of GCC.<br />
|
||||||
</p><p>
|
</p><p>
|
||||||
If you plan on making copies of the documentation, please let us know.
|
If you plan on making copies of the documentation, please let us know.
|
||||||
We can probably offer suggestions.
|
We can probably offer suggestions.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Status </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Bugs</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="status.html">Prev</a> </td><td align="center"><a accesskey="u" href="status.html">Up</a></td><td align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 1. Status </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Bugs</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8. Localization</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7. Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 8. Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="strings.html" title="Chapter 7. Strings"/><link rel="next" href="facets.html" title="Facets"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8.
|
||||||
Localization
|
Localization
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 8. Localization"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8.
|
</th><td align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 8. Localization"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"/>Chapter 8.
|
||||||
Localization
|
Localization
|
||||||
<a id="id492578" class="indexterm"></a>
|
<a id="id478931" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></div><div class="section" title="Locales"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section" title="locale"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></div><div class="section" title="Locales"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization.locales"/>Locales</h2></div></div></div><div class="section" title="locale"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"/>locale</h3></div></div></div><p>
|
||||||
Describes the basic locale object, including nested
|
Describes the basic locale object, including nested
|
||||||
classes id, facet, and the reference-counted implementation object,
|
classes id, facet, and the reference-counted implementation object,
|
||||||
class _Impl.
|
class _Impl.
|
||||||
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
|
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"/>Requirements</h4></div></div></div><p>
|
||||||
Class locale is non-templatized and has two distinct types nested
|
Class locale is non-templatized and has two distinct types nested
|
||||||
inside of it:
|
inside of it:
|
||||||
</p><div class="blockquote"><blockquote class="blockquote"><p>
|
</p><div class="blockquote"><blockquote class="blockquote"><p>
|
||||||
|
|
@ -26,7 +26,7 @@ called numpunct is the data object that can be used to query for the
|
||||||
thousands separator in the locale.
|
thousands separator in the locale.
|
||||||
</p><p>
|
</p><p>
|
||||||
Literally, a facet is strictly defined:
|
Literally, a facet is strictly defined:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Containing the following public data member:
|
Containing the following public data member:
|
||||||
</p><p>
|
</p><p>
|
||||||
<code class="code">static locale::id id;</code>
|
<code class="code">static locale::id id;</code>
|
||||||
|
|
@ -48,14 +48,14 @@ class id
|
||||||
</em></span>
|
</em></span>
|
||||||
</p></blockquote></div><p>
|
</p></blockquote></div><p>
|
||||||
Provides an index for looking up specific facets.
|
Provides an index for looking up specific facets.
|
||||||
</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"></a>Design</h4></div></div></div><p>
|
</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"/>Design</h4></div></div></div><p>
|
||||||
The major design challenge is fitting an object-orientated and
|
The major design challenge is fitting an object-orientated and
|
||||||
non-global locale design on top of POSIX and other relevant standards,
|
non-global locale design on top of POSIX and other relevant standards,
|
||||||
which include the Single Unix (nee X/Open.)
|
which include the Single Unix (nee X/Open.)
|
||||||
</p><p>
|
</p><p>
|
||||||
Because C and earlier versions of POSIX fall down so completely,
|
Because C and earlier versions of POSIX fall down so completely,
|
||||||
portability is an issue.
|
portability is an issue.
|
||||||
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interacting with "C" locales"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"/>Implementation</h4></div></div></div><div class="section" title="Interacting with "C" locales"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"/>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<code class="code">`locale -a`</code> displays available locales.
|
<code class="code">`locale -a`</code> displays available locales.
|
||||||
</p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
|
</p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
|
||||||
af_ZA
|
af_ZA
|
||||||
|
|
@ -385,7 +385,7 @@ global locale" (emphasis Paolo), that is:
|
||||||
particular on the working of locale(""), which constructs the locale
|
particular on the working of locale(""), which constructs the locale
|
||||||
object from the environment of the running program, that is, in
|
object from the environment of the running program, that is, in
|
||||||
practice, the set of LC_ALL, LANG, etc. variable of the shell.
|
practice, the set of LC_ALL, LANG, etc. variable of the shell.
|
||||||
</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"/>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Locale initialization: at what point does _S_classic, _S_global
|
Locale initialization: at what point does _S_classic, _S_global
|
||||||
get initialized? Can named locales assume this initialization
|
get initialized? Can named locales assume this initialization
|
||||||
has already taken place?
|
has already taken place?
|
||||||
|
|
@ -403,37 +403,34 @@ global locale" (emphasis Paolo), that is:
|
||||||
What should non-required facet instantiations do? If the
|
What should non-required facet instantiations do? If the
|
||||||
generic implementation is provided, then how to end-users
|
generic implementation is provided, then how to end-users
|
||||||
provide specializations?
|
provide specializations?
|
||||||
</p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id469670"></a><p><span class="title"><i>
|
</p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id479293"/><p><span class="citetitle"><em class="citetitle">
|
||||||
The GNU C Library
|
The GNU C Library
|
||||||
</i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
|
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
|
||||||
Chapters 6 Character Set Handling and 7 Locales and
|
Chapters 6 Character Set Handling and 7 Locales and
|
||||||
Internationalization
|
Internationalization
|
||||||
. </span></p></div><div class="biblioentry" title="Correspondence"><a id="id506284"></a><p><span class="title"><i>
|
. </span></p></div><div class="biblioentry"><a id="id479333"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Correspondence
|
Correspondence
|
||||||
</i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id404778"></a><p><span class="title"><i>
|
</em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id479359"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 14882:1998 Programming languages - C++
|
ISO/IEC 14882:1998 Programming languages - C++
|
||||||
</i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id404796"></a><p><span class="title"><i>
|
</em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id479378"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 9899:1999 Programming languages - C
|
ISO/IEC 9899:1999 Programming languages - C
|
||||||
</i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id415109"></a><p><span class="biblioid">
|
</em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id479397"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.opengroup.org/austin" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
||||||
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
</em>. </span><span class="copyright">Copyright © 2008
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="copyright">Copyright © 2008
|
|
||||||
The Open Group/The Institute of Electrical and Electronics
|
The Open Group/The Institute of Electrical and Electronics
|
||||||
Engineers, Inc.
|
Engineers, Inc.
|
||||||
. </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id376691"></a><p><span class="title"><i>
|
. </span></p></div><div class="biblioentry"><a id="id479426"/><p><span class="citetitle"><em class="citetitle">
|
||||||
The C++ Programming Language, Special Edition
|
The C++ Programming Language, Special Edition
|
||||||
</i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley
|
Addison Wesley
|
||||||
. </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id349259"></a><p><span class="title"><i>
|
. </span></span></p></div><div class="biblioentry"><a id="id479465"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Standard C++ IOStreams and Locales
|
Standard C++ IOStreams and Locales
|
||||||
</i>. </span><span class="subtitle">
|
</em>. </span><span class="subtitle">
|
||||||
Advanced Programmer's Guide and Reference
|
Advanced Programmer's Guide and Reference
|
||||||
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley Longman
|
Addison Wesley Longman
|
||||||
. </span></span></p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7.
|
. </span></span></p></div></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 7.
|
||||||
Strings
|
Strings
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Facets</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Facets</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Make"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="setup.html" title="Chapter 2. Setup"/><link rel="prev" href="configure.html" title="Configure"/><link rel="next" href="using.html" title="Chapter 3. Using"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr/></div><div class="section" title="Make"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup.make"/>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
|
||||||
<a class="ulink" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
|
<a class="link" href="http://gcc.gnu.org/install/">GCC Installation
|
||||||
Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
|
Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
|
||||||
<span class="emphasis"><em>Twice.</em></span>
|
<span class="emphasis"><em>Twice.</em></span>
|
||||||
</p><p>Then type: <span class="command"><strong>make</strong></span>, and congratulations, you've
|
</p><p>Then type: <span class="command"><strong>make</strong></span>, and congratulations, you've
|
||||||
started to build.
|
started to build.
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td align="center"><a accesskey="u" href="setup.html">Up</a></td><td align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td align="left" valign="top">Configure </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="utilities.html" title="Chapter 6. Utilities"/><link rel="prev" href="pairs.html" title="Pairs"/><link rel="next" href="traits.html" title="Traits"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
|
||||||
Utilities
|
Utilities
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section" title="Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr/></div><div class="section" title="Memory"><div class="titlepage"><div><div><h2 class="title"><a id="std.util.memory"/>Memory</h2></div></div></div><p>
|
||||||
Memory contains three general areas. First, function and operator
|
Memory contains three general areas. First, function and operator
|
||||||
calls via <code class="function">new</code> and <code class="function">delete</code>
|
calls via <code class="function">new</code> and <code class="function">delete</code>
|
||||||
operator or member function calls. Second, allocation via
|
operator or member function calls. Second, allocation via
|
||||||
<code class="classname">allocator</code>. And finally, smart pointer and
|
<code class="classname">allocator</code>. And finally, smart pointer and
|
||||||
intelligent pointer abstractions.
|
intelligent pointer abstractions.
|
||||||
</p><div class="section" title="Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"></a>Allocators</h3></div></div></div><p>
|
</p><div class="section" title="Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"/>Allocators</h3></div></div></div><p>
|
||||||
Memory management for Standard Library entities is encapsulated in a
|
Memory management for Standard Library entities is encapsulated in a
|
||||||
class template called <code class="classname">allocator</code>. The
|
class template called <code class="classname">allocator</code>. The
|
||||||
<code class="classname">allocator</code> abstraction is used throughout the
|
<code class="classname">allocator</code> abstraction is used throughout the
|
||||||
|
|
@ -17,9 +17,9 @@
|
||||||
algorithms, and parts of iostreams. This class, and base classes of
|
algorithms, and parts of iostreams. This class, and base classes of
|
||||||
it, are the superset of available free store (<span class="quote">“<span class="quote">heap</span>”</span>)
|
it, are the superset of available free store (<span class="quote">“<span class="quote">heap</span>”</span>)
|
||||||
management classes.
|
management classes.
|
||||||
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"></a>Requirements</h4></div></div></div><p>
|
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"/>Requirements</h4></div></div></div><p>
|
||||||
The C++ standard only gives a few directives in this area:
|
The C++ standard only gives a few directives in this area:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
When you add elements to a container, and the container must
|
When you add elements to a container, and the container must
|
||||||
allocate more memory to hold them, the container makes the
|
allocate more memory to hold them, the container makes the
|
||||||
request via its <span class="type">Allocator</span> template
|
request via its <span class="type">Allocator</span> template
|
||||||
|
|
@ -54,11 +54,11 @@
|
||||||
</p></li></ul></div><p>
|
</p></li></ul></div><p>
|
||||||
Complete details can be found in the C++ standard, look in
|
Complete details can be found in the C++ standard, look in
|
||||||
<code class="constant">[20.4 Memory]</code>.
|
<code class="constant">[20.4 Memory]</code>.
|
||||||
</p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"></a>Design Issues</h4></div></div></div><p>
|
</p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"/>Design Issues</h4></div></div></div><p>
|
||||||
The easiest way of fulfilling the requirements is to call
|
The easiest way of fulfilling the requirements is to call
|
||||||
<code class="function">operator new</code> each time a container needs
|
<code class="function">operator new</code> each time a container needs
|
||||||
memory, and to call <code class="function">operator delete</code> each time
|
memory, and to call <code class="function">operator delete</code> each time
|
||||||
the container releases memory. This method may be <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html" target="_top">slower</a>
|
the container releases memory. This method may be <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html">slower</a>
|
||||||
than caching the allocations and re-using previously-allocated
|
than caching the allocations and re-using previously-allocated
|
||||||
memory, but has the advantage of working correctly across a wide
|
memory, but has the advantage of working correctly across a wide
|
||||||
variety of hardware and operating systems, including large
|
variety of hardware and operating systems, including large
|
||||||
|
|
@ -93,7 +93,7 @@
|
||||||
or loading and unloading shared objects in memory. As such, using
|
or loading and unloading shared objects in memory. As such, using
|
||||||
caching allocators on systems that do not support
|
caching allocators on systems that do not support
|
||||||
<code class="function">abi::__cxa_atexit</code> is not recommended.
|
<code class="function">abi::__cxa_atexit</code> is not recommended.
|
||||||
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interface Design"><div class="titlepage"><div><div><h5 class="title"><a id="id377805"></a>Interface Design</h5></div></div></div><p>
|
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"/>Implementation</h4></div></div></div><div class="section" title="Interface Design"><div class="titlepage"><div><div><h5 class="title"><a id="id476111"/>Interface Design</h5></div></div></div><p>
|
||||||
The only allocator interface that
|
The only allocator interface that
|
||||||
is supported is the standard C++ interface. As such, all STL
|
is supported is the standard C++ interface. As such, all STL
|
||||||
containers have been adjusted, and all external allocators have
|
containers have been adjusted, and all external allocators have
|
||||||
|
|
@ -106,7 +106,7 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
The base class that <code class="classname">allocator</code> is derived from
|
The base class that <code class="classname">allocator</code> is derived from
|
||||||
may not be user-configurable.
|
may not be user-configurable.
|
||||||
</p></div><div class="section" title="Selecting Default Allocation Policy"><div class="titlepage"><div><div><h5 class="title"><a id="id406368"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
|
</p></div><div class="section" title="Selecting Default Allocation Policy"><div class="titlepage"><div><div><h5 class="title"><a id="id476140"/>Selecting Default Allocation Policy</h5></div></div></div><p>
|
||||||
It's difficult to pick an allocation strategy that will provide
|
It's difficult to pick an allocation strategy that will provide
|
||||||
maximum utility, without excessively penalizing some behavior. In
|
maximum utility, without excessively penalizing some behavior. In
|
||||||
fact, it's difficult just deciding which typical actions to measure
|
fact, it's difficult just deciding which typical actions to measure
|
||||||
|
|
@ -114,14 +114,14 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
Three synthetic benchmarks have been created that provide data
|
Three synthetic benchmarks have been created that provide data
|
||||||
that is used to compare different C++ allocators. These tests are:
|
that is used to compare different C++ allocators. These tests are:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
Insertion.
|
Insertion.
|
||||||
</p><p>
|
</p><p>
|
||||||
Over multiple iterations, various STL container
|
Over multiple iterations, various STL container
|
||||||
objects have elements inserted to some maximum amount. A variety
|
objects have elements inserted to some maximum amount. A variety
|
||||||
of allocators are tested.
|
of allocators are tested.
|
||||||
Test source for <a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup" target="_top">sequence</a>
|
Test source for <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup">sequence</a>
|
||||||
and <a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup" target="_top">associative</a>
|
and <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup">associative</a>
|
||||||
containers.
|
containers.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
Insertion and erasure in a multi-threaded environment.
|
Insertion and erasure in a multi-threaded environment.
|
||||||
|
|
@ -130,20 +130,20 @@
|
||||||
on a per-thread basis, as well as measuring thread contention
|
on a per-thread basis, as well as measuring thread contention
|
||||||
for memory resources.
|
for memory resources.
|
||||||
Test source
|
Test source
|
||||||
<a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup" target="_top">here</a>.
|
<a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup">here</a>.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
A threaded producer/consumer model.
|
A threaded producer/consumer model.
|
||||||
</p><p>
|
</p><p>
|
||||||
Test source for
|
Test source for
|
||||||
<a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup" target="_top">sequence</a>
|
<a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup">sequence</a>
|
||||||
and
|
and
|
||||||
<a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup" target="_top">associative</a>
|
<a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup">associative</a>
|
||||||
containers.
|
containers.
|
||||||
</p></li></ol></div><p>
|
</p></li></ol></div><p>
|
||||||
The current default choice for
|
The current default choice for
|
||||||
<code class="classname">allocator</code> is
|
<code class="classname">allocator</code> is
|
||||||
<code class="classname">__gnu_cxx::new_allocator</code>.
|
<code class="classname">__gnu_cxx::new_allocator</code>.
|
||||||
</p></div><div class="section" title="Disabling Memory Caching"><div class="titlepage"><div><div><h5 class="title"><a id="id394979"></a>Disabling Memory Caching</h5></div></div></div><p>
|
</p></div><div class="section" title="Disabling Memory Caching"><div class="titlepage"><div><div><h5 class="title"><a id="id476251"/>Disabling Memory Caching</h5></div></div></div><p>
|
||||||
In use, <code class="classname">allocator</code> may allocate and
|
In use, <code class="classname">allocator</code> may allocate and
|
||||||
deallocate using implementation-specified strategies and
|
deallocate using implementation-specified strategies and
|
||||||
heuristics. Because of this, every call to an allocator object's
|
heuristics. Because of this, every call to an allocator object's
|
||||||
|
|
@ -179,7 +179,7 @@
|
||||||
environment, it likely means that you linked against objects
|
environment, it likely means that you linked against objects
|
||||||
built against the older library (objects which might still using the
|
built against the older library (objects which might still using the
|
||||||
cached allocations...).
|
cached allocations...).
|
||||||
</p></div></div><div class="section" title="Using a Specific Allocator"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"></a>Using a Specific Allocator</h4></div></div></div><p>
|
</p></div></div><div class="section" title="Using a Specific Allocator"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"/>Using a Specific Allocator</h4></div></div></div><p>
|
||||||
You can specify different memory management schemes on a
|
You can specify different memory management schemes on a
|
||||||
per-container basis, by overriding the default
|
per-container basis, by overriding the default
|
||||||
<span class="type">Allocator</span> template parameter. For example, an easy
|
<span class="type">Allocator</span> template parameter. For example, an easy
|
||||||
|
|
@ -190,7 +190,7 @@
|
||||||
Likewise, a debugging form of whichever allocator is currently in use:
|
Likewise, a debugging form of whichever allocator is currently in use:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
std::deque <int, __gnu_cxx::debug_allocator<std::allocator<int> > > debug_deque;
|
std::deque <int, __gnu_cxx::debug_allocator<std::allocator<int> > > debug_deque;
|
||||||
</pre></div><div class="section" title="Custom Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"></a>Custom Allocators</h4></div></div></div><p>
|
</pre></div><div class="section" title="Custom Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"/>Custom Allocators</h4></div></div></div><p>
|
||||||
Writing a portable C++ allocator would dictate that the interface
|
Writing a portable C++ allocator would dictate that the interface
|
||||||
would look much like the one specified for
|
would look much like the one specified for
|
||||||
<code class="classname">allocator</code>. Additional member functions, but
|
<code class="classname">allocator</code>. Additional member functions, but
|
||||||
|
|
@ -199,7 +199,7 @@
|
||||||
Probably the best place to start would be to copy one of the
|
Probably the best place to start would be to copy one of the
|
||||||
extension allocators: say a simple one like
|
extension allocators: say a simple one like
|
||||||
<code class="classname">new_allocator</code>.
|
<code class="classname">new_allocator</code>.
|
||||||
</p></div><div class="section" title="Extension Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"></a>Extension Allocators</h4></div></div></div><p>
|
</p></div><div class="section" title="Extension Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"/>Extension Allocators</h4></div></div></div><p>
|
||||||
Several other allocators are provided as part of this
|
Several other allocators are provided as part of this
|
||||||
implementation. The location of the extension allocators and their
|
implementation. The location of the extension allocators and their
|
||||||
names have changed, but in all cases, functionality is
|
names have changed, but in all cases, functionality is
|
||||||
|
|
@ -209,7 +209,7 @@
|
||||||
chart to track the changes.
|
chart to track the changes.
|
||||||
</p><p>
|
</p><p>
|
||||||
More details on each of these extension allocators follows.
|
More details on each of these extension allocators follows.
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
<code class="classname">new_allocator</code>
|
<code class="classname">new_allocator</code>
|
||||||
</p><p>
|
</p><p>
|
||||||
Simply wraps <code class="function">::operator new</code>
|
Simply wraps <code class="function">::operator new</code>
|
||||||
|
|
@ -308,41 +308,29 @@
|
||||||
A high-performance allocator that uses a bit-map to keep track
|
A high-performance allocator that uses a bit-map to keep track
|
||||||
of the used and unused memory locations. It has its own
|
of the used and unused memory locations. It has its own
|
||||||
documentation, found <a class="link" href="bitmap_allocator.html" title="bitmap_allocator">here</a>.
|
documentation, found <a class="link" href="bitmap_allocator.html" title="bitmap_allocator">here</a>.
|
||||||
</p></li></ol></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id399256"></a><p><span class="title"><i>
|
</p></li></ol></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id476702"/><p><span class="citetitle"><em class="citetitle">
|
||||||
ISO/IEC 14882:1998 Programming languages - C++
|
ISO/IEC 14882:1998 Programming languages - C++
|
||||||
</i>. </span>
|
</em>. </span>
|
||||||
isoc++_1998
|
isoc++_1998
|
||||||
<span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="id399271"></a><p><span class="biblioid">
|
<span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="id476717"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.drdobbs.com/cpp/184403759" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
The Standard Librarian: What Are Allocators Good For?
|
||||||
The Standard Librarian: What Are Allocators Good For?
|
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
|
|
||||||
C/C++ Users Journal
|
C/C++ Users Journal
|
||||||
. </span></span></p></div><div class="biblioentry"><a id="id405510"></a><p><span class="biblioid">
|
. </span></span></p></div><div class="biblioentry"><a id="id476750"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.cs.umass.edu/~emery/hoard/" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
The Hoard Memory Allocator
|
||||||
The Hoard Memory Allocator
|
</em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="id476776"/><p><span class="biblioid">
|
||||||
</em>
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
</a>
|
Reconsidering Custom Memory Allocation
|
||||||
. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="id451188"></a><p><span class="biblioid">
|
</em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="id476830"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Allocator Types
|
||||||
Reconsidering Custom Memory Allocation
|
</em>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="id387032"></a><p><span class="biblioid">
|
|
||||||
<a class="ulink" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
|
|
||||||
<em class="citetitle">
|
|
||||||
Allocator Types
|
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
|
|
||||||
C/C++ Users Journal
|
C/C++ Users Journal
|
||||||
. </span></span></p></div><div class="biblioentry" title="The C++ Programming Language"><a id="id392077"></a><p><span class="title"><i>The C++ Programming Language</i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
|
. </span></span></p></div><div class="biblioentry"><a id="id476871"/><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
|
||||||
Addison Wesley
|
Addison Wesley
|
||||||
. </span></span></p></div><div class="biblioentry" title="Yalloc: A Recycling C++ Allocator"><a id="id443714"></a><p><span class="title"><i>Yalloc: A Recycling C++ Allocator</i>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section" title="auto_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section" title="Limitations"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
|
. </span></span></p></div><div class="biblioentry"><a id="id476908"/><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section" title="auto_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"/>auto_ptr</h3></div></div></div><div class="section" title="Limitations"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"/>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
|
||||||
happen with misuse of the <code class="classname">auto_ptr</code> class
|
happen with misuse of the <code class="classname">auto_ptr</code> class
|
||||||
template (called <acronym class="acronym">AP</acronym> here) would take some
|
template (called <acronym class="acronym">AP</acronym> here) would take some
|
||||||
time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
|
time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
|
||||||
|
|
@ -393,7 +381,7 @@
|
||||||
to die. AP is trivial to write, however, so you could write your
|
to die. AP is trivial to write, however, so you could write your
|
||||||
own <code class="code">auto_array_ptr</code> for that situation (in fact, this has
|
own <code class="code">auto_array_ptr</code> for that situation (in fact, this has
|
||||||
been done many times; check the mailing lists, Usenet, Boost, etc).
|
been done many times; check the mailing lists, Usenet, Boost, etc).
|
||||||
</p></div><div class="section" title="Use in Containers"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"></a>Use in Containers</h4></div></div></div><p>
|
</p></div><div class="section" title="Use in Containers"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"/>Use in Containers</h4></div></div></div><p>
|
||||||
</p><p>All of the <a class="link" href="containers.html" title="Chapter 9. Containers">containers</a>
|
</p><p>All of the <a class="link" href="containers.html" title="Chapter 9. Containers">containers</a>
|
||||||
described in the standard library require their contained types
|
described in the standard library require their contained types
|
||||||
to have, among other things, a copy constructor like this:
|
to have, among other things, a copy constructor like this:
|
||||||
|
|
@ -429,10 +417,10 @@
|
||||||
}
|
}
|
||||||
</pre><p>
|
</pre><p>
|
||||||
Should you try this with the checks enabled, you will see an error.
|
Should you try this with the checks enabled, you will see an error.
|
||||||
</p></div></div><div class="section" title="shared_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"></a>shared_ptr</h3></div></div></div><p>
|
</p></div></div><div class="section" title="shared_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"/>shared_ptr</h3></div></div></div><p>
|
||||||
The shared_ptr class template stores a pointer, usually obtained via new,
|
The shared_ptr class template stores a pointer, usually obtained via new,
|
||||||
and implements shared ownership semantics.
|
and implements shared ownership semantics.
|
||||||
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"></a>Requirements</h4></div></div></div><p>
|
</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"/>Requirements</h4></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
The standard deliberately doesn't require a reference-counted
|
The standard deliberately doesn't require a reference-counted
|
||||||
implementation, allowing other techniques such as a
|
implementation, allowing other techniques such as a
|
||||||
|
|
@ -444,7 +432,7 @@ and implements shared ownership semantics.
|
||||||
shared_ptr in libstdc++ is derived from Boost's, so the same rules
|
shared_ptr in libstdc++ is derived from Boost's, so the same rules
|
||||||
apply.
|
apply.
|
||||||
</p><p>
|
</p><p>
|
||||||
</p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"></a>Design Issues</h4></div></div></div><p>
|
</p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"/>Design Issues</h4></div></div></div><p>
|
||||||
The <code class="classname">shared_ptr</code> code is kindly donated to GCC by the Boost
|
The <code class="classname">shared_ptr</code> code is kindly donated to GCC by the Boost
|
||||||
project and the original authors of the code. The basic design and
|
project and the original authors of the code. The basic design and
|
||||||
algorithms are from Boost, the notes below describe details specific to
|
algorithms are from Boost, the notes below describe details specific to
|
||||||
|
|
@ -458,7 +446,7 @@ drops to zero.
|
||||||
Derived classes override those functions to destroy resources in a context
|
Derived classes override those functions to destroy resources in a context
|
||||||
where the correct dynamic type is known. This is an application of the
|
where the correct dynamic type is known. This is an application of the
|
||||||
technique known as type erasure.
|
technique known as type erasure.
|
||||||
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section" title="Class Hierarchy"><div class="titlepage"><div><div><h5 class="title"><a id="id389991"></a>Class Hierarchy</h5></div></div></div><p>
|
</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"/>Implementation</h4></div></div></div><div class="section" title="Class Hierarchy"><div class="titlepage"><div><div><h5 class="title"><a id="id477269"/>Class Hierarchy</h5></div></div></div><p>
|
||||||
A <code class="classname">shared_ptr<T></code> contains a pointer of
|
A <code class="classname">shared_ptr<T></code> contains a pointer of
|
||||||
type <span class="type">T*</span> and an object of type
|
type <span class="type">T*</span> and an object of type
|
||||||
<code class="classname">__shared_count</code>. The shared_count contains a
|
<code class="classname">__shared_count</code>. The shared_count contains a
|
||||||
|
|
@ -500,14 +488,14 @@ be forwarded to <span class="type">Tp</span>'s constructor.
|
||||||
Unlike the other <code class="classname">_Sp_counted_*</code> classes, this one is parameterized on the
|
Unlike the other <code class="classname">_Sp_counted_*</code> classes, this one is parameterized on the
|
||||||
type of object, not the type of pointer; this is purely a convenience
|
type of object, not the type of pointer; this is purely a convenience
|
||||||
that simplifies the implementation slightly.
|
that simplifies the implementation slightly.
|
||||||
</p></dd></dl></div></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h5 class="title"><a id="id388735"></a>Thread Safety</h5></div></div></div><p>
|
</p></dd></dl></div></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h5 class="title"><a id="id477447"/>Thread Safety</h5></div></div></div><p>
|
||||||
C++0x-only features are: rvalue-ref/move support, allocator support,
|
C++0x-only features are: rvalue-ref/move support, allocator support,
|
||||||
aliasing constructor, make_shared & allocate_shared. Additionally,
|
aliasing constructor, make_shared & allocate_shared. Additionally,
|
||||||
the constructors taking <code class="classname">auto_ptr</code> parameters are
|
the constructors taking <code class="classname">auto_ptr</code> parameters are
|
||||||
deprecated in C++0x mode.
|
deprecated in C++0x mode.
|
||||||
</p><p>
|
</p><p>
|
||||||
The
|
The
|
||||||
<a class="ulink" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
|
<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety">Thread
|
||||||
Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
|
Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
|
||||||
objects offer the same level of thread safety as built-in types."
|
objects offer the same level of thread safety as built-in types."
|
||||||
The implementation must ensure that concurrent updates to separate shared_ptr
|
The implementation must ensure that concurrent updates to separate shared_ptr
|
||||||
|
|
@ -550,7 +538,7 @@ compiler, standard library, platform etc. For the version of
|
||||||
shared_ptr in libstdc++ the compiler and library are fixed, which
|
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
|
makes things much simpler: we have an atomic CAS or we don't, see Lock
|
||||||
Policy below for details.
|
Policy below for details.
|
||||||
</p></div><div class="section" title="Selecting Lock Policy"><div class="titlepage"><div><div><h5 class="title"><a id="id480578"></a>Selecting Lock Policy</h5></div></div></div><p>
|
</p></div><div class="section" title="Selecting Lock Policy"><div class="titlepage"><div><div><h5 class="title"><a id="id477517"/>Selecting Lock Policy</h5></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
There is a single <code class="classname">_Sp_counted_base</code> class,
|
There is a single <code class="classname">_Sp_counted_base</code> class,
|
||||||
which is a template parameterized on the enum
|
which is a template parameterized on the enum
|
||||||
|
|
@ -566,11 +554,11 @@ specialization will be used. This design is necessary because it would
|
||||||
not be conforming for <code class="classname">shared_ptr</code> to have an
|
not be conforming for <code class="classname">shared_ptr</code> to have an
|
||||||
extra template parameter, even if it had a default value. The
|
extra template parameter, even if it had a default value. The
|
||||||
available policies are:
|
available policies are:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
<span class="type">_S_Atomic</span>
|
<span class="type">_S_Atomic</span>
|
||||||
</p><p>
|
</p><p>
|
||||||
Selected when GCC supports a builtin atomic compare-and-swap operation
|
Selected when GCC supports a builtin atomic compare-and-swap operation
|
||||||
on the target processor (see <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html" target="_top">Atomic
|
on the target processor (see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html">Atomic
|
||||||
Builtins</a>.) The reference counts are maintained using a lock-free
|
Builtins</a>.) The reference counts are maintained using a lock-free
|
||||||
algorithm and GCC's atomic builtins, which provide the required memory
|
algorithm and GCC's atomic builtins, which provide the required memory
|
||||||
synchronisation.
|
synchronisation.
|
||||||
|
|
@ -591,7 +579,7 @@ used when libstdc++ is built without <code class="literal">--enable-threads</cod
|
||||||
<code class="filename">ext/atomicity.h</code>, which detect if the program
|
<code class="filename">ext/atomicity.h</code>, which detect if the program
|
||||||
is multi-threaded. If only one thread of execution exists in
|
is multi-threaded. If only one thread of execution exists in
|
||||||
the program then less expensive non-atomic operations are used.
|
the program then less expensive non-atomic operations are used.
|
||||||
</p></div><div class="section" title="Dual C++0x and TR1 Implementation"><div class="titlepage"><div><div><h5 class="title"><a id="id399352"></a>Dual C++0x and TR1 Implementation</h5></div></div></div><p>
|
</p></div><div class="section" title="Dual C++0x and TR1 Implementation"><div class="titlepage"><div><div><h5 class="title"><a id="id477639"/>Dual C++0x and TR1 Implementation</h5></div></div></div><p>
|
||||||
The interface of <code class="classname">tr1::shared_ptr</code> was extended for C++0x
|
The interface of <code class="classname">tr1::shared_ptr</code> was extended for C++0x
|
||||||
with support for rvalue-references and the other features from N2351.
|
with support for rvalue-references and the other features from N2351.
|
||||||
The <code class="classname">_Sp_counted_base</code> base class is implemented in
|
The <code class="classname">_Sp_counted_base</code> base class is implemented in
|
||||||
|
|
@ -608,7 +596,7 @@ change unless bug fixes require it. If the code that is common to both
|
||||||
C++0x and TR1 modes needs to diverge further then it might be necessary to
|
C++0x and TR1 modes needs to diverge further then it might be necessary to
|
||||||
duplicate <code class="classname">_Sp_counted_base</code> and only make changes to
|
duplicate <code class="classname">_Sp_counted_base</code> and only make changes to
|
||||||
the C++0x version.
|
the C++0x version.
|
||||||
</p></div><div class="section" title="Related functions and classes"><div class="titlepage"><div><div><h5 class="title"><a id="id404250"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
|
</p></div><div class="section" title="Related functions and classes"><div class="titlepage"><div><div><h5 class="title"><a id="id477695"/>Related functions and classes</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
|
||||||
<code class="code">const_pointer_cast</code></span></dt><dd><p>
|
<code class="code">const_pointer_cast</code></span></dt><dd><p>
|
||||||
As noted in N2351, these functions can be implemented non-intrusively using
|
As noted in N2351, these functions can be implemented non-intrusively using
|
||||||
the alias constructor. However the aliasing constructor is only available
|
the alias constructor. However the aliasing constructor is only available
|
||||||
|
|
@ -641,13 +629,13 @@ is called. Users should not try to use this.
|
||||||
As well as the extra constructors, this implementation also needs some
|
As well as the extra constructors, this implementation also needs some
|
||||||
members of _Sp_counted_deleter to be protected where they could otherwise
|
members of _Sp_counted_deleter to be protected where they could otherwise
|
||||||
be private.
|
be private.
|
||||||
</p></dd></dl></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h5 class="title"><a id="id478086"></a>Examples</h5></div></div></div><p>
|
</p></dd></dl></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"/>Use</h4></div></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h5 class="title"><a id="id477844"/>Examples</h5></div></div></div><p>
|
||||||
Examples of use can be found in the testsuite, under
|
Examples of use can be found in the testsuite, under
|
||||||
<code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
|
<code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
|
||||||
<code class="filename">testsuite/20_util/shared_ptr</code>
|
<code class="filename">testsuite/20_util/shared_ptr</code>
|
||||||
and
|
and
|
||||||
<code class="filename">testsuite/20_util/weak_ptr</code>.
|
<code class="filename">testsuite/20_util/weak_ptr</code>.
|
||||||
</p></div><div class="section" title="Unresolved Issues"><div class="titlepage"><div><div><h5 class="title"><a id="id397929"></a>Unresolved Issues</h5></div></div></div><p>
|
</p></div><div class="section" title="Unresolved Issues"><div class="titlepage"><div><div><h5 class="title"><a id="id477874"/>Unresolved Issues</h5></div></div></div><p>
|
||||||
The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
|
The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
|
||||||
clause in the C++0x working draft is not implemented in GCC.
|
clause in the C++0x working draft is not implemented in GCC.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -683,41 +671,29 @@ be private.
|
||||||
</p><p>
|
</p><p>
|
||||||
tr1::_Sp_deleter could be a private member of tr1::__shared_count but it
|
tr1::_Sp_deleter could be a private member of tr1::__shared_count but it
|
||||||
would alter the ABI.
|
would alter the ABI.
|
||||||
</p></div></div><div class="section" title="Acknowledgments"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"></a>Acknowledgments</h4></div></div></div><p>
|
</p></div></div><div class="section" title="Acknowledgments"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"/>Acknowledgments</h4></div></div></div><p>
|
||||||
The original authors of the Boost shared_ptr, which is really nice
|
The original authors of the Boost shared_ptr, which is really nice
|
||||||
code to work with, Peter Dimov in particular for his help and
|
code to work with, Peter Dimov in particular for his help and
|
||||||
invaluable advice on thread safety. Phillip Jordan and Paolo
|
invaluable advice on thread safety. Phillip Jordan and Paolo
|
||||||
Carlini for the lock policy implementation.
|
Carlini for the lock policy implementation.
|
||||||
</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id444231"></a><p><span class="biblioid">
|
</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"/>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id477967"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Improving shared_ptr for C++0x, Revision 2
|
||||||
Improving shared_ptr for C++0x, Revision 2
|
</em>. </span><span class="subtitle">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="subtitle">
|
|
||||||
N2351
|
N2351
|
||||||
. </span></p></div><div class="biblioentry"><a id="id444254"></a><p><span class="biblioid">
|
. </span></p></div><div class="biblioentry"><a id="id477989"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
C++ Standard Library Active Issues List
|
||||||
C++ Standard Library Active Issues List
|
</em>. </span><span class="subtitle">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="subtitle">
|
|
||||||
N2456
|
N2456
|
||||||
. </span></p></div><div class="biblioentry"><a id="id400755"></a><p><span class="biblioid">
|
. </span></p></div><div class="biblioentry"><a id="id478010"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Working Draft, Standard for Programming Language C++
|
||||||
Working Draft, Standard for Programming Language C++
|
</em>. </span><span class="subtitle">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="subtitle">
|
|
||||||
N2461
|
N2461
|
||||||
. </span></p></div><div class="biblioentry"><a id="id424141"></a><p><span class="biblioid">
|
. </span></p></div><div class="biblioentry"><a id="id478032"/><p><span class="biblioid">shared_ptr
|
||||||
<a class="ulink" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">shared_ptr
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Boost C++ Libraries documentation, shared_ptr
|
||||||
Boost C++ Libraries documentation, shared_ptr
|
</em>. </span><span class="subtitle">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="subtitle">
|
|
||||||
N2461
|
N2461
|
||||||
. </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
|
. </span></p></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td align="center"><a accesskey="u" href="utilities.html">Up</a></td><td align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td align="left" valign="top">Pairs </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Traits</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,22 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12. Numerics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11. Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 12. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="algorithms.html" title="Chapter 11. Algorithms"/><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12.
|
||||||
Numerics
|
Numerics
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 12. Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12.
|
</th><td align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 12. Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"/>Chapter 12.
|
||||||
Numerics
|
Numerics
|
||||||
<a id="id415325" class="indexterm"></a>
|
<a id="id483151" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="sect1"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="sect1"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="sect1" title="Complex"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section" title="Complex"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics.complex"/>Complex</h2></div></div></div><p>
|
||||||
</p><div class="sect2" title="complex Processing"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
|
</p><div class="section" title="complex Processing"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"/>complex Processing</h3></div></div></div><p>
|
||||||
</p><p>Using <code class="code">complex<></code> becomes even more comple- er, sorry,
|
</p><p>Using <code class="code">complex<></code> becomes even more comple- er, sorry,
|
||||||
<span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
|
<span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
|
||||||
addition of complex types to the C language. David Tribble has
|
addition of complex types to the C language. David Tribble has
|
||||||
compiled a list of C++98 and C99 conflict points; his description of
|
compiled a list of C++98 and C99 conflict points; his description of
|
||||||
C's new type versus those of C++ and how to get them playing together
|
C's new type versus those of C++ and how to get them playing together
|
||||||
nicely is
|
nicely is
|
||||||
<a class="ulink" href="http://david.tribble.com/text/cdiffs.htm#C99-complex" target="_top">here</a>.
|
<a class="link" href="http://david.tribble.com/text/cdiffs.htm#C99-complex">here</a>.
|
||||||
</p><p><code class="code">complex<></code> is intended to be instantiated with a
|
</p><p><code class="code">complex<></code> is intended to be instantiated with a
|
||||||
floating-point type. As long as you meet that and some other basic
|
floating-point type. As long as you meet that and some other basic
|
||||||
requirements, then the resulting instantiation has all of the usual
|
requirements, then the resulting instantiation has all of the usual
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
and <code class="code">op>></code> that work with iostreams: <code class="code">op<<</code>
|
and <code class="code">op>></code> that work with iostreams: <code class="code">op<<</code>
|
||||||
prints <code class="code">(u,v)</code> and <code class="code">op>></code> can read <code class="code">u</code>,
|
prints <code class="code">(u,v)</code> and <code class="code">op>></code> can read <code class="code">u</code>,
|
||||||
<code class="code">(u)</code>, and <code class="code">(u,v)</code>.
|
<code class="code">(u)</code>, and <code class="code">(u,v)</code>.
|
||||||
</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 11.
|
</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 11.
|
||||||
Algorithms
|
Algorithms
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="numerics.html" title="Chapter 12. Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="numerics.html" title="Chapter 12. Numerics"/><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations"/><link rel="next" href="io.html" title="Chapter 13. Input and Output"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12.
|
||||||
Numerics
|
Numerics
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.c"></a>Interacting with C</h2></div></div></div><div class="sect2" title="Numerics vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"></a>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
|
</th><td align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr/></div><div class="section" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics.c"/>Interacting with C</h2></div></div></div><div class="section" title="Numerics vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"/>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
|
||||||
is that it is defined to be free of pointer aliasing, an assumption
|
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
|
that C89 is not allowed to make, and neither is C++98. C99 adds a new
|
||||||
keyword, <code class="code">restrict</code>, to apply to individual pointers. The
|
keyword, <code class="code">restrict</code>, to apply to individual pointers. The
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
speaking this is only one of the five template classes, and they are
|
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
|
designed to be familiar to people who have worked with the BLAS
|
||||||
libraries before.
|
libraries before.
|
||||||
</p></div><div class="sect2" title="C99"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"></a>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
|
</p></div><div class="section" title="C99"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"/>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
|
||||||
of the C99 features that appear in libstdc++.
|
of the C99 features that appear in libstdc++.
|
||||||
</p><p>The C99 features depend on the <code class="code">--enable-c99</code> configure flag.
|
</p><p>The C99 features depend on the <code class="code">--enable-c99</code> configure flag.
|
||||||
This flag is already on by default, but it can be disabled by the
|
This flag is already on by default, but it can be disabled by the
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
are supported, as is the <code class="code">lldiv_t</code> typedef. Also supported
|
are supported, as is the <code class="code">lldiv_t</code> typedef. Also supported
|
||||||
are the wide character functions using 'long long', like
|
are the wide character functions using 'long long', like
|
||||||
<code class="code">wcstoll</code>.
|
<code class="code">wcstoll</code>.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Generalized Operations </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 13.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><td align="center"><a accesskey="u" href="numerics.html">Up</a></td><td align="right"> <a accesskey="n" href="io.html">Next</a></td></tr><tr><td align="left" valign="top">Generalized Operations </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 13.
|
||||||
Input and Output
|
Input and Output
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6. Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="utilities.html" title="Chapter 6. Utilities"/><link rel="prev" href="utilities.html" title="Chapter 6. Utilities"/><link rel="next" href="memory.html" title="Memory"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
|
||||||
Utilities
|
Utilities
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section" title="Pairs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair<T1,T2></code> is a simple and handy way to
|
</th><td align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr/></div><div class="section" title="Pairs"><div class="titlepage"><div><div><h2 class="title"><a id="std.util.pairs"/>Pairs</h2></div></div></div><p>The <code class="code">pair<T1,T2></code> is a simple and handy way to
|
||||||
carry around a pair of objects. One is of type T1, and another of
|
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
|
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
|
extra if they are. The two members can be accessed directly, as
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
instance of a pair instantiated on their respective types:
|
instance of a pair instantiated on their respective types:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
pair<int,MyClass> p = make_pair(4,myobject);
|
pair<int,MyClass> p = make_pair(4,myobject);
|
||||||
</pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6.
|
</pre></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><td align="center"><a accesskey="u" href="utilities.html">Up</a></td><td align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 6.
|
||||||
Utilities
|
Utilities
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Memory</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Memory</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , parallel " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bk01pt03ch17s04.html" title="Design" /><link rel="next" href="bk01pt03ch18s02.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , parallel "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="bk01pt03ch17s04.html" title="Design"/><link rel="next" href="bk01pt03ch18s02.html" title="Semantics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 18. Parallel Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
|
</th><td align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 18. Parallel Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"/>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
|
||||||
implementation of many algorithms the C++ Standard Library.
|
implementation of many algorithms the C++ Standard Library.
|
||||||
</p><p>
|
</p><p>
|
||||||
Several of the standard algorithms, for instance
|
Several of the standard algorithms, for instance
|
||||||
|
|
@ -11,14 +11,14 @@ Several of the standard algorithms, for instance
|
||||||
annotations. These parallel mode constructs and can be invoked by
|
annotations. These parallel mode constructs and can be invoked by
|
||||||
explicit source declaration or by compiling existing sources with a
|
explicit source declaration or by compiling existing sources with a
|
||||||
specific compiler flag.
|
specific compiler flag.
|
||||||
</p><div class="sect1" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
|
</p><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode.intro"/>Intro</h2></div></div></div><p>The following library components in the include
|
||||||
<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
|
<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
|
||||||
<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="Parallelization of Bulk Operations for STL Dictionaries"><a id="id503217"></a><p><span class="title"><i>
|
<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"/>Bibliography</h2></div></div></div><div class="biblioentry"><a id="id489074"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Parallelization of Bulk Operations for STL Dictionaries
|
Parallelization of Bulk Operations for STL Dictionaries
|
||||||
</i>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
|
</em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
|
||||||
Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
|
Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
|
||||||
. </span></span></p></div><div class="biblioentry" title="The Multi-Core Standard Template Library"><a id="id503264"></a><p><span class="title"><i>
|
. </span></span></p></div><div class="biblioentry"><a id="id489117"/><p><span class="citetitle"><em class="citetitle">
|
||||||
The Multi-Core Standard Template Library
|
The Multi-Core Standard Template Library
|
||||||
</i>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
|
</em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
|
||||||
Euro-Par 2007: Parallel Processing. (LNCS 4641)
|
Euro-Par 2007: Parallel Processing. (LNCS 4641)
|
||||||
. </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
|
. </span></span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td align="left" valign="top">Design </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Semantics</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , library , profile " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bk01pt03ch18s05.html" title="Testing" /><link rel="next" href="bk01pt03ch19s02.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , library , profile "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="extensions.html" title="Part III. Extensions"/><link rel="prev" href="bk01pt03ch18s05.html" title="Testing"/><link rel="next" href="bk01pt03ch19s02.html" title="Design"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III.
|
||||||
Extensions
|
Extensions
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 19. Profile Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="sect1" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 19. Profile Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"/>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode.intro"/>Intro</h2></div></div></div><p>
|
||||||
<span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
|
<span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
|
||||||
recognition of suboptimal usage patterns of the standard library.
|
recognition of suboptimal usage patterns of the standard library.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -12,11 +12,11 @@
|
||||||
various components at interesting entry/exit points to/from the standard
|
various components at interesting entry/exit points to/from the standard
|
||||||
library. Process trace, recognize suboptimal patterns, give advice.
|
library. Process trace, recognize suboptimal patterns, give advice.
|
||||||
For details, see
|
For details, see
|
||||||
<a class="ulink" href="http://dx.doi.org/10.1109/CGO.2009.36" target="_top">paper presented at
|
<a class="link" href="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
|
||||||
CGO 2009</a>.
|
CGO 2009</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
<span class="emphasis"><em>Strengths: </em></span>
|
<span class="emphasis"><em>Strengths: </em></span>
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Unintrusive solution. The application code does not require any
|
Unintrusive solution. The application code does not require any
|
||||||
modification.
|
modification.
|
||||||
</p></li><li class="listitem"><p> The advice is call context sensitive, thus capable of
|
</p></li><li class="listitem"><p> The advice is call context sensitive, thus capable of
|
||||||
|
|
@ -27,14 +27,14 @@
|
||||||
</p></li></ul></div><p>
|
</p></li></ul></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
<span class="emphasis"><em>Drawbacks: </em></span>
|
<span class="emphasis"><em>Drawbacks: </em></span>
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
You must recompile the application code with custom options.
|
You must recompile the application code with custom options.
|
||||||
</p></li><li class="listitem"><p>You must run the application on representative input.
|
</p></li><li class="listitem"><p>You must run the application on representative input.
|
||||||
The advice is input dependent.
|
The advice is input dependent.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
The execution time will increase, in some cases by factors.
|
The execution time will increase, in some cases by factors.
|
||||||
</p></li></ul></div><p>
|
</p></li></ul></div><p>
|
||||||
</p><div class="sect2" title="Using the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.using"></a>Using the Profile Mode</h3></div></div></div><p>
|
</p><div class="section" title="Using the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.using"/>Using the Profile Mode</h3></div></div></div><p>
|
||||||
This is the anticipated common workflow for program <code class="code">foo.cc</code>:
|
This is the anticipated common workflow for program <code class="code">foo.cc</code>:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
$ cat foo.cc
|
$ cat foo.cc
|
||||||
|
|
@ -54,7 +54,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
|
||||||
</pre><p>
|
</pre><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
Anatomy of a warning:
|
Anatomy of a warning:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Warning id. This is a short descriptive string for the class
|
Warning id. This is a short descriptive string for the class
|
||||||
that this warning belongs to. E.g., "vector-to-list".
|
that this warning belongs to. E.g., "vector-to-list".
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
|
|
@ -94,11 +94,11 @@ vector-size: improvement = 3: call stack = 0x804842c ...
|
||||||
We believe such warnings can help users understand the performance
|
We believe such warnings can help users understand the performance
|
||||||
behavior of their application better, which can lead to changes
|
behavior of their application better, which can lead to changes
|
||||||
at a higher abstraction level.
|
at a higher abstraction level.
|
||||||
</p></div><div class="sect2" title="Tuning the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.tuning"></a>Tuning the Profile Mode</h3></div></div></div><p>Compile time switches and environment variables (see also file
|
</p></div><div class="section" title="Tuning the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.tuning"/>Tuning the Profile Mode</h3></div></div></div><p>Compile time switches and environment variables (see also file
|
||||||
profiler.h). Unless specified otherwise, they can be set at compile time
|
profiler.h). Unless specified otherwise, they can be set at compile time
|
||||||
using -D_<name> or by setting variable <name>
|
using -D_<name> or by setting variable <name>
|
||||||
in the environment where the program is run, before starting execution.
|
in the environment where the program is run, before starting execution.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<code class="code">_GLIBCXX_PROFILE_NO_<diagnostic></code>:
|
<code class="code">_GLIBCXX_PROFILE_NO_<diagnostic></code>:
|
||||||
disable specific diagnostics.
|
disable specific diagnostics.
|
||||||
See section Diagnostics for possible values.
|
See section Diagnostics for possible values.
|
||||||
|
|
@ -138,9 +138,9 @@ vector-size: improvement = 3: call stack = 0x804842c ...
|
||||||
call context.
|
call context.
|
||||||
(Environment variable not supported.)
|
(Environment variable not supported.)
|
||||||
</p></li></ul></div><p>
|
</p></li></ul></div><p>
|
||||||
</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="Perflint: A Context Sensitive Performance Advisor for C++ Programs"><a id="id486510"></a><p><span class="title"><i>
|
</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"/>Bibliography</h2></div></div></div><div class="biblioentry"><a id="id492966"/><p><span class="citetitle"><em class="citetitle">
|
||||||
Perflint: A Context Sensitive Performance Advisor for C++ Programs
|
Perflint: A Context Sensitive Performance Advisor for C++ Programs
|
||||||
</i>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername">
|
</em>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername">
|
||||||
Proceedings of the 2009 International Symposium on Code Generation
|
Proceedings of the 2009 International Symposium on Code Generation
|
||||||
and Optimization
|
and Optimization
|
||||||
. </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
|
. </span></span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td align="center"><a accesskey="u" href="extensions.html">Up</a></td><td align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td align="left" valign="top">Testing </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Design</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="intro.html" title="Part I. Introduction"/><link rel="prev" href="bugs.html" title="Bugs"/><link rel="next" href="configure.html" title="Configure"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I.
|
||||||
Introduction
|
Introduction
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 2. Setup"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
|
</th><td align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 2. Setup"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"/>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
|
||||||
and properly built binaries useful for linking to other software is
|
and properly built binaries useful for linking to other software is
|
||||||
a multi-step process. Steps include getting the sources,
|
a multi-step process. Steps include getting the sources,
|
||||||
configuring and building the sources, testing, and installation.
|
configuring and building the sources, testing, and installation.
|
||||||
|
|
@ -19,12 +19,12 @@
|
||||||
make install
|
make install
|
||||||
</pre><p>
|
</pre><p>
|
||||||
Each step is described in more detail in the following sections.
|
Each step is described in more detail in the following sections.
|
||||||
</p><div class="sect1" title="Prerequisites"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.prereq"></a>Prerequisites</h2></div></div></div><p>
|
</p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup.prereq"/>Prerequisites</h2></div></div></div><p>
|
||||||
Because libstdc++ is part of GCC, the primary source for
|
Because libstdc++ is part of GCC, the primary source for
|
||||||
installation instructions is
|
installation instructions is
|
||||||
<a class="ulink" href="http://gcc.gnu.org/install/" target="_top">the GCC install page</a>.
|
<a class="link" href="http://gcc.gnu.org/install/">the GCC install page</a>.
|
||||||
In particular, list of prerequisite software needed to build the library
|
In particular, list of prerequisite software needed to build the library
|
||||||
<a class="ulink" href="http://gcc.gnu.org/install/prerequisites.html" target="_top">
|
<a class="link" href="http://gcc.gnu.org/install/prerequisites.html">
|
||||||
starts with those requirements.</a> The same pages also list
|
starts with those requirements.</a> The same pages also list
|
||||||
the tools you will need if you wish to modify the source.
|
the tools you will need if you wish to modify the source.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
</p><p>As of GCC 4.0.1 the minimum version of binutils required to build
|
</p><p>As of GCC 4.0.1 the minimum version of binutils required to build
|
||||||
libstdc++ is <code class="code">2.15.90.0.1.1</code>. You can get snapshots
|
libstdc++ is <code class="code">2.15.90.0.1.1</code>. You can get snapshots
|
||||||
(as well as releases) of binutils from
|
(as well as releases) of binutils from
|
||||||
<a class="ulink" href="ftp://sources.redhat.com/pub/binutils/" target="_top">
|
<a class="link" href="ftp://sources.redhat.com/pub/binutils/">
|
||||||
ftp://sources.redhat.com/pub/binutils</a>.
|
ftp://sources.redhat.com/pub/binutils</a>.
|
||||||
Older releases of libstdc++ do not require such a recent version,
|
Older releases of libstdc++ do not require such a recent version,
|
||||||
but to take full advantage of useful space-saving features and
|
but to take full advantage of useful space-saving features and
|
||||||
|
|
@ -41,8 +41,8 @@
|
||||||
features if the underlying support is present.
|
features if the underlying support is present.
|
||||||
</p><p>
|
</p><p>
|
||||||
To generate the API documentation from the sources you will need
|
To generate the API documentation from the sources you will need
|
||||||
Doxygen, see <a class="link" href="documentation_style.html" title="Documentation Style">Documentation
|
Doxygen, see <a class="link" href="documentation_hacking.html" title="Writing and Generating Documentation">Documentation
|
||||||
Style</a> in the appendix for full details.
|
Hacking</a> in the appendix for full details.
|
||||||
</p><p>
|
</p><p>
|
||||||
Finally, a few system-specific requirements:
|
Finally, a few system-specific requirements:
|
||||||
</p><div class="variablelist"><dl><dt><span class="term">linux</span></dt><dd><p>
|
</p><div class="variablelist"><dl><dt><span class="term">linux</span></dt><dd><p>
|
||||||
|
|
@ -77,17 +77,17 @@ ru_RU.UTF-8 UTF-8
|
||||||
se_NO.UTF-8 UTF-8
|
se_NO.UTF-8 UTF-8
|
||||||
ta_IN UTF-8
|
ta_IN UTF-8
|
||||||
zh_TW BIG5
|
zh_TW BIG5
|
||||||
</pre><p>Failure to have the underlying "C" library locale
|
</pre><p>Failure to have installed the underlying "C" library
|
||||||
information installed will mean that C++ named locales for the
|
locale information for any of the above regions means that
|
||||||
above regions will not work: because of this, the libstdc++
|
the corresponding C++ named locale will not work: because of
|
||||||
testsuite will skip the named locale tests. If this isn't an
|
this, the libstdc++ testsuite will skip named locale tests
|
||||||
issue, don't worry about it. If named locales are needed, the
|
which need missing information. If this isn't an issue, don't
|
||||||
underlying locale information must be installed. Note that
|
worry about it. If a named locale is needed, the underlying
|
||||||
rebuilding libstdc++ after the "C" locales are installed is not
|
locale information must be installed. Note that rebuilding
|
||||||
necessary.
|
libstdc++ after "C" locales are installed is not necessary.
|
||||||
</p><p>
|
</p><p>
|
||||||
To install support for locales, do only one of the following:
|
To install support for locales, do only one of the following:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>install all locales</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>with RedHat Linux:
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>install all locales</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>with RedHat Linux:
|
||||||
</p><p> <code class="code"> export LC_ALL=C </code>
|
</p><p> <code class="code"> export LC_ALL=C </code>
|
||||||
</p><p> <code class="code"> rpm -e glibc-common --nodeps </code>
|
</p><p> <code class="code"> rpm -e glibc-common --nodeps </code>
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -96,7 +96,7 @@ zh_TW BIG5
|
||||||
</code>
|
</code>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
Instructions for other operating systems solicited.
|
Instructions for other operating systems solicited.
|
||||||
</p></li></ul></div></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>with Debian Linux:</p><p> Add the above list, as shown, to the file
|
</p></li></ul></div></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>with Debian Linux:</p><p> Add the above list, as shown, to the file
|
||||||
<code class="code">/etc/locale.gen</code> </p><p> run <code class="code">/usr/sbin/locale-gen</code> </p></li><li class="listitem"><p>on most Unix-like operating systems:</p><p><code class="code"> localedef -i de_DE -f ISO-8859-1 de_DE </code></p><p>(repeat for each entry in the above list) </p></li><li class="listitem"><p>
|
<code class="code">/etc/locale.gen</code> </p><p> run <code class="code">/usr/sbin/locale-gen</code> </p></li><li class="listitem"><p>on most Unix-like operating systems:</p><p><code class="code"> localedef -i de_DE -f ISO-8859-1 de_DE </code></p><p>(repeat for each entry in the above list) </p></li><li class="listitem"><p>
|
||||||
Instructions for other operating systems solicited.
|
Instructions for other operating systems solicited.
|
||||||
</p></li></ul></div></li></ul></div></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Bugs </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Configure</td></tr></table></div></body></html>
|
</p></li></ul></div></li></ul></div></dd></dl></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><td align="center"><a accesskey="u" href="intro.html">Up</a></td><td align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr><tr><td align="left" valign="top">Bugs </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Configure</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,97 +1,97 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="prev" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing"/><link rel="prev" href="appendix_contributing.html" title="Appendix A. Contributing"/><link rel="next" href="source_code_style.html" title="Coding Style"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A.
|
||||||
Contributing
|
Contributing
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Directory Layout and Source Conventions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.organization"></a>Directory Layout and Source Conventions</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr/></div><div class="section" title="Directory Layout and Source Conventions"><div class="titlepage"><div><div><h2 class="title"><a id="contrib.organization"/>Directory Layout and Source Conventions</h2></div></div></div><p>
|
||||||
The unpacked source directory of libstdc++ contains the files
|
The unpacked source directory of libstdc++ contains the files
|
||||||
needed to create the GNU C++ Library.
|
needed to create the GNU C++ Library.
|
||||||
</p><div class="literallayout"><p><br />
|
</p><div class="literallayout"><p><br/>
|
||||||
It has subdirectories:<br />
|
It has subdirectories:<br/>
|
||||||
<br />
|
<br/>
|
||||||
doc<br />
|
doc<br/>
|
||||||
Files in HTML and text format that document usage, quirks of the<br />
|
Files in HTML and text format that document usage, quirks of the<br/>
|
||||||
implementation, and contributor checklists.<br />
|
implementation, and contributor checklists.<br/>
|
||||||
<br />
|
<br/>
|
||||||
include<br />
|
include<br/>
|
||||||
All header files for the C++ library are within this directory,<br />
|
All header files for the C++ library are within this directory,<br/>
|
||||||
modulo specific runtime-related files that are in the libsupc++<br />
|
modulo specific runtime-related files that are in the libsupc++<br/>
|
||||||
directory.<br />
|
directory.<br/>
|
||||||
<br />
|
<br/>
|
||||||
include/std<br />
|
include/std<br/>
|
||||||
Files meant to be found by #include <name> directives in<br />
|
Files meant to be found by #include <name> directives in<br/>
|
||||||
standard-conforming user programs.<br />
|
standard-conforming user programs.<br/>
|
||||||
<br />
|
<br/>
|
||||||
include/c<br />
|
include/c<br/>
|
||||||
Headers intended to directly include standard C headers.<br />
|
Headers intended to directly include standard C headers.<br/>
|
||||||
[NB: this can be enabled via --enable-cheaders=c]<br />
|
[NB: this can be enabled via --enable-cheaders=c]<br/>
|
||||||
<br />
|
<br/>
|
||||||
include/c_global<br />
|
include/c_global<br/>
|
||||||
Headers intended to include standard C headers in<br />
|
Headers intended to include standard C headers in<br/>
|
||||||
the global namespace, and put select names into the std::<br />
|
the global namespace, and put select names into the std::<br/>
|
||||||
namespace. [NB: this is the default, and is the same as<br />
|
namespace. [NB: this is the default, and is the same as<br/>
|
||||||
--enable-cheaders=c_global]<br />
|
--enable-cheaders=c_global]<br/>
|
||||||
<br />
|
<br/>
|
||||||
include/c_std<br />
|
include/c_std<br/>
|
||||||
Headers intended to include standard C headers<br />
|
Headers intended to include standard C headers<br/>
|
||||||
already in namespace std, and put select names into the std::<br />
|
already in namespace std, and put select names into the std::<br/>
|
||||||
namespace. [NB: this is the same as --enable-cheaders=c_std]<br />
|
namespace. [NB: this is the same as --enable-cheaders=c_std]<br/>
|
||||||
<br />
|
<br/>
|
||||||
include/bits<br />
|
include/bits<br/>
|
||||||
Files included by standard headers and by other files in<br />
|
Files included by standard headers and by other files in<br/>
|
||||||
the bits directory.<br />
|
the bits directory.<br/>
|
||||||
<br />
|
<br/>
|
||||||
include/backward<br />
|
include/backward<br/>
|
||||||
Headers provided for backward compatibility, such as <iostream.h>.<br />
|
Headers provided for backward compatibility, such as <iostream.h>.<br/>
|
||||||
They are not used in this library.<br />
|
They are not used in this library.<br/>
|
||||||
<br />
|
<br/>
|
||||||
include/ext<br />
|
include/ext<br/>
|
||||||
Headers that define extensions to the standard library. No<br />
|
Headers that define extensions to the standard library. No<br/>
|
||||||
standard header refers to any of them.<br />
|
standard header refers to any of them.<br/>
|
||||||
<br />
|
<br/>
|
||||||
scripts<br />
|
scripts<br/>
|
||||||
Scripts that are used during the configure, build, make, or test<br />
|
Scripts that are used during the configure, build, make, or test<br/>
|
||||||
process.<br />
|
process.<br/>
|
||||||
<br />
|
<br/>
|
||||||
src<br />
|
src<br/>
|
||||||
Files that are used in constructing the library, but are not<br />
|
Files that are used in constructing the library, but are not<br/>
|
||||||
installed.<br />
|
installed.<br/>
|
||||||
<br />
|
<br/>
|
||||||
testsuites/[backward, demangle, ext, performance, thread, 17_* to 27_*]<br />
|
testsuites/[backward, demangle, ext, performance, thread, 17_* to 27_*]<br/>
|
||||||
Test programs are here, and may be used to begin to exercise the<br />
|
Test programs are here, and may be used to begin to exercise the<br/>
|
||||||
library. Support for "make check" and "make check-install" is<br />
|
library. Support for "make check" and "make check-install" is<br/>
|
||||||
complete, and runs through all the subdirectories here when this<br />
|
complete, and runs through all the subdirectories here when this<br/>
|
||||||
command is issued from the build directory. Please note that<br />
|
command is issued from the build directory. Please note that<br/>
|
||||||
"make check" requires DejaGNU 1.4 or later to be installed. Please<br />
|
"make check" requires DejaGNU 1.4 or later to be installed. Please<br/>
|
||||||
note that "make check-script" calls the script mkcheck, which<br />
|
note that "make check-script" calls the script mkcheck, which<br/>
|
||||||
requires bash, and which may need the paths to bash adjusted to<br />
|
requires bash, and which may need the paths to bash adjusted to<br/>
|
||||||
work properly, as /bin/bash is assumed.<br />
|
work properly, as /bin/bash is assumed.<br/>
|
||||||
<br />
|
<br/>
|
||||||
Other subdirectories contain variant versions of certain files<br />
|
Other subdirectories contain variant versions of certain files<br/>
|
||||||
that are meant to be copied or linked by the configure script.<br />
|
that are meant to be copied or linked by the configure script.<br/>
|
||||||
Currently these are:<br />
|
Currently these are:<br/>
|
||||||
<br />
|
<br/>
|
||||||
config/abi<br />
|
config/abi<br/>
|
||||||
config/cpu<br />
|
config/cpu<br/>
|
||||||
config/io<br />
|
config/io<br/>
|
||||||
config/locale<br />
|
config/locale<br/>
|
||||||
config/os<br />
|
config/os<br/>
|
||||||
<br />
|
<br/>
|
||||||
In addition, a subdirectory holds the convenience library libsupc++.<br />
|
In addition, a subdirectory holds the convenience library libsupc++.<br/>
|
||||||
<br />
|
<br/>
|
||||||
libsupc++<br />
|
libsupc++<br/>
|
||||||
Contains the runtime library for C++, including exception<br />
|
Contains the runtime library for C++, including exception<br/>
|
||||||
handling and memory allocation and deallocation, RTTI, terminate<br />
|
handling and memory allocation and deallocation, RTTI, terminate<br/>
|
||||||
handlers, etc.<br />
|
handlers, etc.<br/>
|
||||||
<br />
|
<br/>
|
||||||
Note that glibc also has a bits/ subdirectory. We will either<br />
|
Note that glibc also has a bits/ subdirectory. We will either<br/>
|
||||||
need to be careful not to collide with names in its bits/<br />
|
need to be careful not to collide with names in its bits/<br/>
|
||||||
directory; or rename bits to (e.g.) cppbits/.<br />
|
directory; or rename bits to (e.g.) cppbits/.<br/>
|
||||||
<br />
|
<br/>
|
||||||
In files throughout the system, lines marked with an "XXX" indicate<br />
|
In files throughout the system, lines marked with an "XXX" indicate<br/>
|
||||||
a bug or incompletely-implemented feature. Lines marked "XXX MT"<br />
|
a bug or incompletely-implemented feature. Lines marked "XXX MT"<br/>
|
||||||
indicate a place that may require attention for multi-thread safety.<br />
|
indicate a place that may require attention for multi-thread safety.<br/>
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix A.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr><tr><td align="left" valign="top">Appendix A.
|
||||||
Contributing
|
Contributing
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Coding Style</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Coding Style</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,15 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="io.html" title="Chapter 13. Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="io.html" title="Chapter 13. Input and Output"/><link rel="prev" href="io.html" title="Chapter 13. Input and Output"/><link rel="next" href="stringstreams.html" title="Memory Based Streams"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
|
||||||
Input and Output
|
Input and Output
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Stream Buffers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.streambufs"></a>Stream Buffers</h2></div></div></div><div class="sect2" title="Derived streambuf Classes"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr/></div><div class="section" title="Stream Buffers"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.streambufs"/>Stream Buffers</h2></div></div></div><div class="section" title="Derived streambuf Classes"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"/>Derived streambuf Classes</h3></div></div></div><p>
|
||||||
</p><p>Creating your own stream buffers for I/O can be remarkably easy.
|
</p><p>Creating your own stream buffers for I/O can be remarkably easy.
|
||||||
If you are interested in doing so, we highly recommend two very
|
If you are interested in doing so, we highly recommend two very
|
||||||
excellent books:
|
excellent books:
|
||||||
<a class="ulink" href="http://www.angelikalanger.com/iostreams.html" target="_top">Standard C++
|
<a class="link" href="http://www.angelikalanger.com/iostreams.html">Standard C++
|
||||||
IOStreams and Locales</a> by Langer and Kreft, ISBN 0-201-18395-1, and
|
IOStreams and Locales</a> by Langer and Kreft, ISBN 0-201-18395-1, and
|
||||||
<a class="ulink" href="http://www.josuttis.com/libbook/" target="_top">The C++ Standard Library</a>
|
<a class="link" href="http://www.josuttis.com/libbook/">The C++ Standard Library</a>
|
||||||
by Nicolai Josuttis, ISBN 0-201-37926-0. Both are published by
|
by Nicolai Josuttis, ISBN 0-201-37926-0. Both are published by
|
||||||
Addison-Wesley, who isn't paying us a cent for saying that, honest.
|
Addison-Wesley, who isn't paying us a cent for saying that, honest.
|
||||||
</p><p>Here is a simple example, io/outbuf1, from the Josuttis text. It
|
</p><p>Here is a simple example, io/outbuf1, from the Josuttis text. It
|
||||||
|
|
@ -55,9 +55,9 @@
|
||||||
}
|
}
|
||||||
</pre><p>Try it yourself! More examples can be found in 3.1.x code, in
|
</pre><p>Try it yourself! More examples can be found in 3.1.x code, in
|
||||||
<code class="code">include/ext/*_filebuf.h</code>, and in this article by James Kanze:
|
<code class="code">include/ext/*_filebuf.h</code>, and in this article by James Kanze:
|
||||||
<a class="ulink" href="http://kanze.james.neuf.fr/articles/fltrsbf1.html" target="_top">Filtering
|
<a class="link" href="http://kanze.james.neuf.fr/articles/fltrsbf1.html">Filtering
|
||||||
Streambufs</a>.
|
Streambufs</a>.
|
||||||
</p></div><div class="sect2" title="Buffering"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"></a>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Chaptericularly
|
</p></div><div class="section" title="Buffering"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"/>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Chaptericularly
|
||||||
the fact that C++ may not, in fact, have anything to do with it?
|
the fact that C++ may not, in fact, have anything to do with it?
|
||||||
</p><p>The rules for buffering can be a little odd, but they aren't any
|
</p><p>The rules for buffering can be a little odd, but they aren't any
|
||||||
different from those of C. (Maybe that's why they can be a bit
|
different from those of C. (Maybe that's why they can be a bit
|
||||||
|
|
@ -131,7 +131,7 @@
|
||||||
just those at the language/library level. Kernel buffers, disk
|
just those at the language/library level. Kernel buffers, disk
|
||||||
buffers, and the like will also have an effect. Inspecting and
|
buffers, and the like will also have an effect. Inspecting and
|
||||||
changing those are system-dependent.
|
changing those are system-dependent.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="io.html">Prev</a> </td><td align="center"><a accesskey="u" href="io.html">Up</a></td><td align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr><tr><td align="left" valign="top">Chapter 13.
|
||||||
Input and Output
|
Input and Output
|
||||||
|
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7. Strings</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8. Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 7. Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="traits.html" title="Traits"/><link rel="next" href="localization.html" title="Chapter 8. Localization"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7.
|
||||||
Strings
|
Strings
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 7. Strings"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7.
|
</th><td align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 7. Strings"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"/>Chapter 7.
|
||||||
Strings
|
Strings
|
||||||
<a id="id471606" class="indexterm"></a>
|
<a id="id478110" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="sect2"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="sect1" title="String Classes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="sect2" title="Simple Transformations"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section" title="String Classes"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings.string"/>String Classes</h2></div></div></div><div class="section" title="Simple Transformations"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"/>Simple Transformations</h3></div></div></div><p>
|
||||||
Here are Standard, simple, and portable ways to perform common
|
Here are Standard, simple, and portable ways to perform common
|
||||||
transformations on a <code class="code">string</code> instance, such as
|
transformations on a <code class="code">string</code> instance, such as
|
||||||
"convert to all upper case." The word transformations
|
"convert to all upper case." The word transformations
|
||||||
|
|
@ -64,7 +64,7 @@
|
||||||
are overloaded names (declared in <code class="code"><cctype></code> and
|
are overloaded names (declared in <code class="code"><cctype></code> and
|
||||||
<code class="code"><locale></code>) so the template-arguments for
|
<code class="code"><locale></code>) so the template-arguments for
|
||||||
<code class="code">transform<></code> cannot be deduced, as explained in
|
<code class="code">transform<></code> cannot be deduced, as explained in
|
||||||
<a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html" target="_top">this
|
<a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html">this
|
||||||
message</a>.
|
message</a>.
|
||||||
|
|
||||||
At minimum, you can write short wrappers like
|
At minimum, you can write short wrappers like
|
||||||
|
|
@ -89,9 +89,9 @@
|
||||||
str.erase(notwhite+1); </pre><p>Obviously, the calls to <code class="code">find</code> could be inserted directly
|
str.erase(notwhite+1); </pre><p>Obviously, the calls to <code class="code">find</code> could be inserted directly
|
||||||
into the calls to <code class="code">erase</code>, in case your compiler does not
|
into the calls to <code class="code">erase</code>, in case your compiler does not
|
||||||
optimize named temporaries out of existence.
|
optimize named temporaries out of existence.
|
||||||
</p></div><div class="sect2" title="Case Sensitivity"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"></a>Case Sensitivity</h3></div></div></div><p>
|
</p></div><div class="section" title="Case Sensitivity"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"/>Case Sensitivity</h3></div></div></div><p>
|
||||||
</p><p>The well-known-and-if-it-isn't-well-known-it-ought-to-be
|
</p><p>The well-known-and-if-it-isn't-well-known-it-ought-to-be
|
||||||
<a class="ulink" href="http://www.gotw.ca/gotw/" target="_top">Guru of the Week</a>
|
<a class="link" href="http://www.gotw.ca/gotw/">Guru of the Week</a>
|
||||||
discussions held on Usenet covered this topic in January of 1998.
|
discussions held on Usenet covered this topic in January of 1998.
|
||||||
Briefly, the challenge was, <span class="quote">“<span class="quote">write a 'ci_string' class which
|
Briefly, the challenge was, <span class="quote">“<span class="quote">write a 'ci_string' class which
|
||||||
is identical to the standard 'string' class, but is
|
is identical to the standard 'string' class, but is
|
||||||
|
|
@ -108,10 +108,10 @@
|
||||||
assert( strcmp( s.c_str(), "AbCdE" ) == 0 );
|
assert( strcmp( s.c_str(), "AbCdE" ) == 0 );
|
||||||
assert( strcmp( s.c_str(), "abcde" ) != 0 ); </pre><p>The solution is surprisingly easy. The original answer was
|
assert( strcmp( s.c_str(), "abcde" ) != 0 ); </pre><p>The solution is surprisingly easy. The original answer was
|
||||||
posted on Usenet, and a revised version appears in Herb Sutter's
|
posted on Usenet, and a revised version appears in Herb Sutter's
|
||||||
book <span class="emphasis"><em>Exceptional C++</em></span> and on his website as <a class="ulink" href="http://www.gotw.ca/gotw/029.htm" target="_top">GotW 29</a>.
|
book <span class="emphasis"><em>Exceptional C++</em></span> and on his website as <a class="link" href="http://www.gotw.ca/gotw/029.htm">GotW 29</a>.
|
||||||
</p><p>See? Told you it was easy!</p><p>
|
</p><p>See? Told you it was easy!</p><p>
|
||||||
<span class="emphasis"><em>Added June 2000:</em></span> The May 2000 issue of C++
|
<span class="emphasis"><em>Added June 2000:</em></span> The May 2000 issue of C++
|
||||||
Report contains a fascinating <a class="ulink" href="http://lafstern.org/matt/col2_new.pdf" target="_top"> article</a> by
|
Report contains a fascinating <a class="link" href="http://lafstern.org/matt/col2_new.pdf"> article</a> by
|
||||||
Matt Austern (yes, <span class="emphasis"><em>the</em></span> Matt Austern) on why
|
Matt Austern (yes, <span class="emphasis"><em>the</em></span> Matt Austern) on why
|
||||||
case-insensitive comparisons are not as easy as they seem, and
|
case-insensitive comparisons are not as easy as they seem, and
|
||||||
why creating a class is the <span class="emphasis"><em>wrong</em></span> way to go
|
why creating a class is the <span class="emphasis"><em>wrong</em></span> way to go
|
||||||
|
|
@ -123,10 +123,10 @@
|
||||||
that nobody ever called me on it...) The GotW question and answer
|
that nobody ever called me on it...) The GotW question and answer
|
||||||
remain useful instructional tools, however.
|
remain useful instructional tools, however.
|
||||||
</p><p><span class="emphasis"><em>Added September 2000:</em></span> James Kanze provided a link to a
|
</p><p><span class="emphasis"><em>Added September 2000:</em></span> James Kanze provided a link to a
|
||||||
<a class="ulink" href="http://www.unicode.org/reports/tr21/tr21-5.html" target="_top">Unicode
|
<a class="link" href="http://www.unicode.org/reports/tr21/tr21-5.html">Unicode
|
||||||
Technical Report discussing case handling</a>, which provides some
|
Technical Report discussing case handling</a>, which provides some
|
||||||
very good information.
|
very good information.
|
||||||
</p></div><div class="sect2" title="Arbitrary Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"></a>Arbitrary Character Types</h3></div></div></div><p>
|
</p></div><div class="section" title="Arbitrary Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"/>Arbitrary Character Types</h3></div></div></div><p>
|
||||||
</p><p>The <code class="code">std::basic_string</code> is tantalizingly general, in that
|
</p><p>The <code class="code">std::basic_string</code> is tantalizingly general, in that
|
||||||
it is parameterized on the type of the characters which it holds.
|
it is parameterized on the type of the characters which it holds.
|
||||||
In theory, you could whip up a Unicode character class and instantiate
|
In theory, you could whip up a Unicode character class and instantiate
|
||||||
|
|
@ -169,18 +169,18 @@
|
||||||
works and can be specialized even for <code class="code">int</code> and other
|
works and can be specialized even for <code class="code">int</code> and other
|
||||||
built-in types.
|
built-in types.
|
||||||
</p><p>If you want to use your own special character class, then you have
|
</p><p>If you want to use your own special character class, then you have
|
||||||
<a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html" target="_top">a lot
|
<a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html">a lot
|
||||||
of work to do</a>, especially if you with to use i18n features
|
of work to do</a>, especially if you with to use i18n features
|
||||||
(facets require traits information but don't have a traits argument).
|
(facets require traits information but don't have a traits argument).
|
||||||
</p><p>Another example of how to specialize char_traits was given <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html" target="_top">on the
|
</p><p>Another example of how to specialize char_traits was given <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html">on the
|
||||||
mailing list</a> and at a later date was put into the file <code class="code">
|
mailing list</a> and at a later date was put into the file <code class="code">
|
||||||
include/ext/pod_char_traits.h</code>. We agree
|
include/ext/pod_char_traits.h</code>. We agree
|
||||||
that the way it's used with basic_string (scroll down to main())
|
that the way it's used with basic_string (scroll down to main())
|
||||||
doesn't look nice, but that's because <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html" target="_top">the
|
doesn't look nice, but that's because <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html">the
|
||||||
nice-looking first attempt</a> turned out to <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html" target="_top">not
|
nice-looking first attempt</a> turned out to <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html">not
|
||||||
be conforming C++</a>, due to the rule that CharT must be a POD.
|
be conforming C++</a>, due to the rule that CharT must be a POD.
|
||||||
(See how tricky this is?)
|
(See how tricky this is?)
|
||||||
</p></div><div class="sect2" title="Tokenizing"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"></a>Tokenizing</h3></div></div></div><p>
|
</p></div><div class="section" title="Tokenizing"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"/>Tokenizing</h3></div></div></div><p>
|
||||||
</p><p>The Standard C (and C++) function <code class="code">strtok()</code> leaves a lot to
|
</p><p>The Standard C (and C++) function <code class="code">strtok()</code> leaves a lot to
|
||||||
be desired in terms of user-friendliness. It's unintuitive, it
|
be desired in terms of user-friendliness. It's unintuitive, it
|
||||||
destroys the character string on which it operates, and it requires
|
destroys the character string on which it operates, and it requires
|
||||||
|
|
@ -256,7 +256,7 @@ stringtok(Container &container, string const &in,
|
||||||
tokenizing as well. Build an istringstream from the input text,
|
tokenizing as well. Build an istringstream from the input text,
|
||||||
and then use std::getline with varying delimiters (the three-argument
|
and then use std::getline with varying delimiters (the three-argument
|
||||||
signature) to extract tokens into a string.
|
signature) to extract tokens into a string.
|
||||||
</p></div><div class="sect2" title="Shrink to Fit"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"></a>Shrink to Fit</h3></div></div></div><p>
|
</p></div><div class="section" title="Shrink to Fit"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"/>Shrink to Fit</h3></div></div></div><p>
|
||||||
</p><p>From GCC 3.4 calling <code class="code">s.reserve(res)</code> on a
|
</p><p>From GCC 3.4 calling <code class="code">s.reserve(res)</code> on a
|
||||||
<code class="code">string s</code> with <code class="code">res < s.capacity()</code> will
|
<code class="code">string s</code> with <code class="code">res < s.capacity()</code> will
|
||||||
reduce the string's capacity to <code class="code">std::max(s.size(), res)</code>.
|
reduce the string's capacity to <code class="code">std::max(s.size(), res)</code>.
|
||||||
|
|
@ -272,7 +272,7 @@ stringtok(Container &container, string const &in,
|
||||||
</p><p>In <a class="link" href="status.html#status.iso.200x" title="C++ 200x">C++0x</a> mode you can call
|
</p><p>In <a class="link" href="status.html#status.iso.200x" title="C++ 200x">C++0x</a> mode you can call
|
||||||
<code class="code">s.shrink_to_fit()</code> to achieve the same effect as
|
<code class="code">s.shrink_to_fit()</code> to achieve the same effect as
|
||||||
<code class="code">s.reserve(s.size())</code>.
|
<code class="code">s.reserve(s.size())</code>.
|
||||||
</p></div><div class="sect2" title="CString (MFC)"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
|
</p></div><div class="section" title="CString (MFC)"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"/>CString (MFC)</h3></div></div></div><p>
|
||||||
</p><p>A common lament seen in various newsgroups deals with the Standard
|
</p><p>A common lament seen in various newsgroups deals with the Standard
|
||||||
string class as opposed to the Microsoft Foundation Class called
|
string class as opposed to the Microsoft Foundation Class called
|
||||||
CString. Often programmers realize that a standard portable
|
CString. Often programmers realize that a standard portable
|
||||||
|
|
@ -280,9 +280,9 @@ stringtok(Container &container, string const &in,
|
||||||
their application from a Win32 platform, they discover that they
|
their application from a Win32 platform, they discover that they
|
||||||
are relying on special functions offered by the CString class.
|
are relying on special functions offered by the CString class.
|
||||||
</p><p>Things are not as bad as they seem. In
|
</p><p>Things are not as bad as they seem. In
|
||||||
<a class="ulink" href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html" target="_top">this
|
<a class="link" href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html">this
|
||||||
message</a>, Joe Buck points out a few very important things:
|
message</a>, Joe Buck points out a few very important things:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
|
||||||
that CString does, with three exceptions.
|
that CString does, with three exceptions.
|
||||||
</p></li><li class="listitem"><p>Two of those exceptions (whitespace trimming and case
|
</p></li><li class="listitem"><p>Two of those exceptions (whitespace trimming and case
|
||||||
conversion) are trivial to implement. In fact, we do so
|
conversion) are trivial to implement. In fact, we do so
|
||||||
|
|
@ -340,7 +340,7 @@ stringtok(Container &container, string const &in,
|
||||||
performance is O(n).
|
performance is O(n).
|
||||||
</pre><p>Joe Buck also pointed out some other things to keep in mind when
|
</pre><p>Joe Buck also pointed out some other things to keep in mind when
|
||||||
comparing CString and the Standard string class:
|
comparing CString and the Standard string class:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>CString permits access to its internal representation; coders
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>CString permits access to its internal representation; coders
|
||||||
who exploited that may have problems moving to <code class="code">string</code>.
|
who exploited that may have problems moving to <code class="code">string</code>.
|
||||||
</p></li><li class="listitem"><p>Microsoft ships the source to CString (in the files
|
</p></li><li class="listitem"><p>Microsoft ships the source to CString (in the files
|
||||||
MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation
|
MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation
|
||||||
|
|
@ -360,7 +360,7 @@ stringtok(Container &container, string const &in,
|
||||||
libstdc++ string, the SGI string, and the SGI rope, and this
|
libstdc++ string, the SGI string, and the SGI rope, and this
|
||||||
is all before any allocator or traits customizations! (More
|
is all before any allocator or traits customizations! (More
|
||||||
choices than you can shake a stick at -- want fries with that?)
|
choices than you can shake a stick at -- want fries with that?)
|
||||||
</p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Traits </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8.
|
</p></li></ul></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="traits.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr><tr><td align="left" valign="top">Traits </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 8.
|
||||||
Localization
|
Localization
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="io.html" title="Chapter 13. Input and Output"/><link rel="prev" href="streambufs.html" title="Stream Buffers"/><link rel="next" href="fstreams.html" title="File Based Streams"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
|
||||||
Input and Output
|
Input and Output
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Memory Based Streams"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.memstreams"></a>Memory Based Streams</h2></div></div></div><div class="sect2" title="Compatibility With strstream"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr/></div><div class="section" title="Memory Based Streams"><div class="titlepage"><div><div><h2 class="title"><a id="std.io.memstreams"/>Memory Based Streams</h2></div></div></div><div class="section" title="Compatibility With strstream"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"/>Compatibility With strstream</h3></div></div></div><p>
|
||||||
</p><p>Stringstreams (defined in the header <code class="code"><sstream></code>)
|
</p><p>Stringstreams (defined in the header <code class="code"><sstream></code>)
|
||||||
are in this author's opinion one of the coolest things since
|
are in this author's opinion one of the coolest things since
|
||||||
sliced time. An example of their use is in the Received Wisdom
|
sliced time. An example of their use is in the Received Wisdom
|
||||||
|
|
@ -34,4 +34,4 @@
|
||||||
memory yourself. The strstreams have been officially deprecated,
|
memory yourself. The strstreams have been officially deprecated,
|
||||||
which means that 1) future revisions of the C++ Standard won't
|
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.
|
support them, and 2) if you use them, people will laugh at you.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td align="center"><a accesskey="u" href="io.html">Up</a></td><td align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td align="left" valign="top">Stream Buffers </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4. Support</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 4. Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="next" href="dynamic_memory.html" title="Dynamic Memory"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4.
|
||||||
Support
|
Support
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 4. Support"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4.
|
</th><td align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 4. Support"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"/>Chapter 4.
|
||||||
Support
|
Support
|
||||||
<a id="id402698" class="indexterm"></a>
|
<a id="id474643" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="sect2"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="sect1"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="sect1"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="sect2"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect2"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
|
||||||
This part deals with the functions called and objects created
|
This part deals with the functions called and objects created
|
||||||
automatically during the course of a program's existence.
|
automatically during the course of a program's existence.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -16,9 +16,9 @@
|
||||||
need to get your own copy from your nation's member body; see our
|
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
|
homepage for help), we can mention a couple of changes in what
|
||||||
kind of support a C++ program gets from the Standard Library.
|
kind of support a C++ program gets from the Standard Library.
|
||||||
</p><div class="sect1" title="Types"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.types"></a>Types</h2></div></div></div><div class="sect2" title="Fundamental Types"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"></a>Fundamental Types</h3></div></div></div><p>
|
</p><div class="section" title="Types"><div class="titlepage"><div><div><h2 class="title"><a id="std.support.types"/>Types</h2></div></div></div><div class="section" title="Fundamental Types"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"/>Fundamental Types</h3></div></div></div><p>
|
||||||
C++ has the following builtin types:
|
C++ has the following builtin types:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
char
|
char
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
signed char
|
signed char
|
||||||
|
|
@ -53,12 +53,12 @@
|
||||||
</p><p>
|
</p><p>
|
||||||
Specializing parts of the library on these types is prohibited:
|
Specializing parts of the library on these types is prohibited:
|
||||||
instead, use a POD.
|
instead, use a POD.
|
||||||
</p></div><div class="sect2" title="Numeric Properties"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"></a>Numeric Properties</h3></div></div></div><p>
|
</p></div><div class="section" title="Numeric Properties"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"/>Numeric Properties</h3></div></div></div><p>
|
||||||
The header <code class="filename">limits</code> defines
|
The header <code class="filename">limits</code> defines
|
||||||
traits classes to give access to various implementation
|
traits classes to give access to various implementation
|
||||||
defined-aspects of the fundamental types. The traits classes --
|
defined-aspects of the fundamental types. The traits classes --
|
||||||
fourteen in total -- are all specializations of the template class
|
fourteen in total -- are all specializations of the template class
|
||||||
<code class="classname">numeric_limits</code>, documented <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html" target="_top">here</a>
|
<code class="classname">numeric_limits</code>, documented <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html">here</a>
|
||||||
and defined as follows:
|
and defined as follows:
|
||||||
</p><pre class="programlisting">
|
</p><pre class="programlisting">
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
@ -99,7 +99,7 @@
|
||||||
static const bool tinyness_before;
|
static const bool tinyness_before;
|
||||||
static const float_round_style round_style;
|
static const float_round_style round_style;
|
||||||
};
|
};
|
||||||
</pre></div><div class="sect2" title="NULL"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"></a>NULL</h3></div></div></div><p>
|
</pre></div><div class="section" title="NULL"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"/>NULL</h3></div></div></div><p>
|
||||||
The only change that might affect people is the type of
|
The only change that might affect people is the type of
|
||||||
<code class="constant">NULL</code>: while it is required to be a macro,
|
<code class="constant">NULL</code>: while it is required to be a macro,
|
||||||
the definition of that macro is <span class="emphasis"><em>not</em></span> allowed
|
the definition of that macro is <span class="emphasis"><em>not</em></span> allowed
|
||||||
|
|
@ -116,15 +116,15 @@
|
||||||
overloading won't do what you expect. (This is why
|
overloading won't do what you expect. (This is why
|
||||||
<span class="command"><strong>g++</strong></span> has a magic extension, so that
|
<span class="command"><strong>g++</strong></span> has a magic extension, so that
|
||||||
<code class="constant">NULL</code> is always a pointer.)
|
<code class="constant">NULL</code> is always a pointer.)
|
||||||
</p><p>In his book <a class="ulink" href="http://www.awprofessional.com/titles/0-201-92488-9/" target="_top"><span class="emphasis"><em>Effective
|
</p><p>In his book <a class="link" href="http://www.awprofessional.com/titles/0-201-92488-9/"><span class="emphasis"><em>Effective
|
||||||
C++</em></span></a>, Scott Meyers points out that the best way
|
C++</em></span></a>, Scott Meyers points out that the best way
|
||||||
to solve this problem is to not overload on pointer-vs-integer
|
to solve this problem is to not overload on pointer-vs-integer
|
||||||
types to begin with. He also offers a way to make your own magic
|
types to begin with. He also offers a way to make your own magic
|
||||||
<code class="constant">NULL</code> that will match pointers before it
|
<code class="constant">NULL</code> that will match pointers before it
|
||||||
matches integers.
|
matches integers.
|
||||||
</p><p>See
|
</p><p>See
|
||||||
<a class="ulink" href="http://www.awprofessional.com/titles/0-201-31015-5/" target="_top">the
|
<a class="link" href="http://www.awprofessional.com/titles/0-201-31015-5/">the
|
||||||
Effective C++ CD example</a>
|
Effective C++ CD example</a>
|
||||||
</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II.
|
</p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr><tr><td align="left" valign="top">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
|
</td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Chapter 4. Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5. Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="support.html" title="Chapter 4. Support"/><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory"/><link rel="next" href="diagnostics.html" title="Chapter 5. Diagnostics"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4.
|
||||||
Support
|
Support
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Termination"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.termination"></a>Termination</h2></div></div></div><div class="sect2" title="Termination Handlers"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr/></div><div class="section" title="Termination"><div class="titlepage"><div><div><h2 class="title"><a id="std.support.termination"/>Termination</h2></div></div></div><div class="section" title="Termination Handlers"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"/>Termination Handlers</h3></div></div></div><p>
|
||||||
Not many changes here to <code class="filename">cstdlib</code>. You should note that the
|
Not many changes here to <code class="filename">cstdlib</code>. You should note that the
|
||||||
<code class="function">abort()</code> function does not call the
|
<code class="function">abort()</code> function does not call the
|
||||||
destructors of automatic nor static objects, so if you're
|
destructors of automatic nor static objects, so if you're
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
The good old <code class="function">exit()</code> function can be a bit
|
The good old <code class="function">exit()</code> function can be a bit
|
||||||
funky, too, until you look closer. Basically, three points to
|
funky, too, until you look closer. Basically, three points to
|
||||||
remember are:
|
remember are:
|
||||||
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
|
</p><div class="orderedlist"><ol class="orderedlist"><li class="listitem"><p>
|
||||||
Static objects are destroyed in reverse order of their creation.
|
Static objects are destroyed in reverse order of their creation.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
Functions registered with <code class="function">atexit()</code> are called in
|
Functions registered with <code class="function">atexit()</code> are called in
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
functions, and the compiler/library might already be using some of
|
functions, and the compiler/library might already be using some of
|
||||||
those slots. If you think you may run out, we recommend using
|
those slots. If you think you may run out, we recommend using
|
||||||
the <code class="function">xatexit</code>/<code class="function">xexit</code> combination from <code class="literal">libiberty</code>, which has no such limit.
|
the <code class="function">xatexit</code>/<code class="function">xexit</code> combination from <code class="literal">libiberty</code>, which has no such limit.
|
||||||
</p></div><div class="sect2" title="Verbose Terminate Handler"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"></a>Verbose Terminate Handler</h3></div></div></div><p>
|
</p></div><div class="section" title="Verbose Terminate Handler"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"/>Verbose Terminate Handler</h3></div></div></div><p>
|
||||||
If you are having difficulty with uncaught exceptions and want a
|
If you are having difficulty with uncaught exceptions and want a
|
||||||
little bit of help debugging the causes of the core dumps, you can
|
little bit of help debugging the causes of the core dumps, you can
|
||||||
make use of a GNU extension, the verbose terminate handler.
|
make use of a GNU extension, the verbose terminate handler.
|
||||||
|
|
@ -118,7 +118,7 @@ int main(int argc)
|
||||||
inappropriate location,
|
inappropriate location,
|
||||||
<code class="function">__verbose_terminate_handler</code> will behave in
|
<code class="function">__verbose_terminate_handler</code> will behave in
|
||||||
an unspecified manner.
|
an unspecified manner.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Dynamic Memory </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5.
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><td align="center"><a accesskey="u" href="support.html">Up</a></td><td align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr><tr><td align="left" valign="top">Dynamic Memory </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 5.
|
||||||
Diagnostics
|
Diagnostics
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , test , testsuite , performance , conformance , ABI , exception safety " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , test , testsuite , performance , conformance , ABI , exception safety "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance"/><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems"/><link rel="next" href="abi.html" title="ABI Policy and Guidelines"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B.
|
||||||
Porting and Maintenance
|
Porting and Maintenance
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Test"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr/></div><div class="section" title="Test"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup.test"/>Test</h2></div></div></div><p>
|
||||||
The libstdc++ testsuite includes testing for standard conformance,
|
The libstdc++ testsuite includes testing for standard conformance,
|
||||||
regressions, ABI, and performance.
|
regressions, ABI, and performance.
|
||||||
</p><div class="sect2" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"></a>Organization</h3></div></div></div><div class="sect3" title="Directory Layout"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"></a>Directory Layout</h4></div></div></div><p>
|
</p><div class="section" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"/>Organization</h3></div></div></div><div class="section" title="Directory Layout"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"/>Directory Layout</h4></div></div></div><p>
|
||||||
The directory <span class="emphasis"><em>libsrcdir/testsuite</em></span> contains the
|
The directory <span class="emphasis"><em>libsrcdir/testsuite</em></span> contains the
|
||||||
individual test cases organized in sub-directories corresponding to
|
individual test cases organized in sub-directories corresponding to
|
||||||
chapters of the C++ standard (detailed below), the dejagnu test
|
chapters of the C++ standard (detailed below), the dejagnu test
|
||||||
|
|
@ -77,11 +77,11 @@ util Files for libtestc++, utilities and testing routines.
|
||||||
</pre><p>
|
</pre><p>
|
||||||
All new tests should be written with the policy of one test
|
All new tests should be written with the policy of one test
|
||||||
case, one file in mind.
|
case, one file in mind.
|
||||||
</p></div><div class="sect3" title="Naming Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.naming"></a>Naming Conventions</h4></div></div></div><p>
|
</p></div><div class="section" title="Naming Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.naming"/>Naming Conventions</h4></div></div></div><p>
|
||||||
In addition, there are some special names and suffixes that are
|
In addition, there are some special names and suffixes that are
|
||||||
used within the testsuite to designate particular kinds of
|
used within the testsuite to designate particular kinds of
|
||||||
tests.
|
tests.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<span class="emphasis"><em>_xin.cc</em></span>
|
<span class="emphasis"><em>_xin.cc</em></span>
|
||||||
</p><p>
|
</p><p>
|
||||||
This test case expects some kind of interactive input in order
|
This test case expects some kind of interactive input in order
|
||||||
|
|
@ -131,7 +131,7 @@ cat 27_io/objects/char/3_xin.in | a.out
|
||||||
analyze runtime performance, for performance regression testing,
|
analyze runtime performance, for performance regression testing,
|
||||||
or for other optimization related analysis. At the moment, these
|
or for other optimization related analysis. At the moment, these
|
||||||
test cases are not run by default.
|
test cases are not run by default.
|
||||||
</p></li></ul></div></div></div><div class="sect2" title="Running the Testsuite"><div class="titlepage"><div><div><h3 class="title"><a id="test.run"></a>Running the Testsuite</h3></div></div></div><div class="sect3" title="Basic"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.basic"></a>Basic</h4></div></div></div><p>
|
</p></li></ul></div></div></div><div class="section" title="Running the Testsuite"><div class="titlepage"><div><div><h3 class="title"><a id="test.run"/>Running the Testsuite</h3></div></div></div><div class="section" title="Basic"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.basic"/>Basic</h4></div></div></div><p>
|
||||||
You can check the status of the build without installing it
|
You can check the status of the build without installing it
|
||||||
using the dejagnu harness, much like the rest of the gcc
|
using the dejagnu harness, much like the rest of the gcc
|
||||||
tools.</p><pre class="programlisting"> make check</pre><p>in the <span class="emphasis"><em>libbuilddir</em></span> directory.</p><p>or</p><pre class="programlisting"> make check-target-libstdc++-v3</pre><p>in the <span class="emphasis"><em>gccbuilddir</em></span> directory.
|
tools.</p><pre class="programlisting"> make check</pre><p>in the <span class="emphasis"><em>libbuilddir</em></span> directory.</p><p>or</p><pre class="programlisting"> make check-target-libstdc++-v3</pre><p>in the <span class="emphasis"><em>gccbuilddir</em></span> directory.
|
||||||
|
|
@ -146,12 +146,12 @@ cat 27_io/objects/char/3_xin.in | a.out
|
||||||
output, and the executable output (if any).
|
output, and the executable output (if any).
|
||||||
</p><p>
|
</p><p>
|
||||||
Archives of test results for various versions and platforms are
|
Archives of test results for various versions and platforms are
|
||||||
available on the GCC website in the <a class="ulink" href="http://gcc.gnu.org/gcc-4.3/buildstat.html" target="_top">build
|
available on the GCC website in the <a class="link" href="http://gcc.gnu.org/gcc-4.3/buildstat.html">build
|
||||||
status</a> section of each individual release, and are also
|
status</a> section of each individual release, and are also
|
||||||
archived on a daily basis on the <a class="ulink" href="http://gcc.gnu.org/ml/gcc-testresults/current" target="_top">gcc-testresults</a>
|
archived on a daily basis on the <a class="link" href="http://gcc.gnu.org/ml/gcc-testresults/current">gcc-testresults</a>
|
||||||
mailing list. Please check either of these places for a similar
|
mailing list. Please check either of these places for a similar
|
||||||
combination of source version, operating system, and host CPU.
|
combination of source version, operating system, and host CPU.
|
||||||
</p></div><div class="sect3" title="Variations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.variations"></a>Variations</h4></div></div></div><p>
|
</p></div><div class="section" title="Variations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.variations"/>Variations</h4></div></div></div><p>
|
||||||
There are several options for running tests, including testing
|
There are several options for running tests, including testing
|
||||||
the regression tests, testing a subset of the regression tests,
|
the regression tests, testing a subset of the regression tests,
|
||||||
testing the performance tests, testing just compilation, testing
|
testing the performance tests, testing just compilation, testing
|
||||||
|
|
@ -222,7 +222,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
|
||||||
</pre><p>
|
</pre><p>
|
||||||
Five files are generated that determine what test files
|
Five files are generated that determine what test files
|
||||||
are run. These files are:
|
are run. These files are:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<span class="emphasis"><em>testsuite_files</em></span>
|
<span class="emphasis"><em>testsuite_files</em></span>
|
||||||
</p><p>
|
</p><p>
|
||||||
This is a list of all the test cases that will be run. Each
|
This is a list of all the test cases that will be run. Each
|
||||||
|
|
@ -277,7 +277,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
|
||||||
We are interested in any strange failures of the testsuite;
|
We are interested in any strange failures of the testsuite;
|
||||||
please email the main libstdc++ mailing list if you see
|
please email the main libstdc++ mailing list if you see
|
||||||
something odd or have questions.
|
something odd or have questions.
|
||||||
</p></div><div class="sect3" title="Permutations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"></a>Permutations</h4></div></div></div><p>
|
</p></div><div class="section" title="Permutations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"/>Permutations</h4></div></div></div><p>
|
||||||
To run the libstdc++ test suite under the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, edit
|
To run the libstdc++ test suite under the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, edit
|
||||||
<code class="filename">libstdc++-v3/scripts/testsuite_flags</code> to add the
|
<code class="filename">libstdc++-v3/scripts/testsuite_flags</code> to add the
|
||||||
compile-time flag <code class="constant">-D_GLIBCXX_DEBUG</code> to the
|
compile-time flag <code class="constant">-D_GLIBCXX_DEBUG</code> to the
|
||||||
|
|
@ -297,7 +297,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
|
||||||
Or, just run the testsuites with <code class="constant">CXXFLAGS</code>
|
Or, just run the testsuites with <code class="constant">CXXFLAGS</code>
|
||||||
set to <code class="constant">-D_GLIBCXX_DEBUG</code> or
|
set to <code class="constant">-D_GLIBCXX_DEBUG</code> or
|
||||||
<code class="constant">-D_GLIBCXX_PARALLEL</code>.
|
<code class="constant">-D_GLIBCXX_PARALLEL</code>.
|
||||||
</p></div></div><div class="sect2" title="Writing a new test case"><div class="titlepage"><div><div><h3 class="title"><a id="test.new_tests"></a>Writing a new test case</h3></div></div></div><p>
|
</p></div></div><div class="section" title="Writing a new test case"><div class="titlepage"><div><div><h3 class="title"><a id="test.new_tests"/>Writing a new test case</h3></div></div></div><p>
|
||||||
The first step in making a new test case is to choose the correct
|
The first step in making a new test case is to choose the correct
|
||||||
directory and file name, given the organization as previously
|
directory and file name, given the organization as previously
|
||||||
described.
|
described.
|
||||||
|
|
@ -408,7 +408,7 @@ up in the normal.exp file.
|
||||||
// { dg-options "-O0" { target *-*-* } }
|
// { dg-options "-O0" { target *-*-* } }
|
||||||
</pre><p>
|
</pre><p>
|
||||||
More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
|
More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
|
||||||
</p></div><div class="sect2" title="Test Harness and Utilities"><div class="titlepage"><div><div><h3 class="title"><a id="test.harness"></a>Test Harness and Utilities</h3></div></div></div><div class="sect3" title="Dejagnu Harness Details"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.dejagnu"></a>Dejagnu Harness Details</h4></div></div></div><p>
|
</p></div><div class="section" title="Test Harness and Utilities"><div class="titlepage"><div><div><h3 class="title"><a id="test.harness"/>Test Harness and Utilities</h3></div></div></div><div class="section" title="Dejagnu Harness Details"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.dejagnu"/>Dejagnu Harness Details</h4></div></div></div><p>
|
||||||
Underlying details of testing for conformance and regressions are
|
Underlying details of testing for conformance and regressions are
|
||||||
abstracted via the GNU Dejagnu package. This is similar to the
|
abstracted via the GNU Dejagnu package. This is similar to the
|
||||||
rest of GCC.
|
rest of GCC.
|
||||||
|
|
@ -435,7 +435,7 @@ callbacks loaded from the support library.
|
||||||
</p><p>The <code class="code">config</code> directory is searched for any particular "target
|
</p><p>The <code class="code">config</code> directory is searched for any particular "target
|
||||||
board" information unique to this library. This is currently unused and sets
|
board" information unique to this library. This is currently unused and sets
|
||||||
only default variables.
|
only default variables.
|
||||||
</p></div><div class="sect3" title="Utilities"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.utils"></a>Utilities</h4></div></div></div><p>
|
</p></div><div class="section" title="Utilities"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.utils"/>Utilities</h4></div></div></div><p>
|
||||||
</p><p>
|
</p><p>
|
||||||
The testsuite directory also contains some files that implement
|
The testsuite directory also contains some files that implement
|
||||||
functionality that is intended to make writing test cases easier,
|
functionality that is intended to make writing test cases easier,
|
||||||
|
|
@ -447,7 +447,7 @@ only default variables.
|
||||||
during testing.
|
during testing.
|
||||||
</p><p>
|
</p><p>
|
||||||
These files include the following functionality:
|
These files include the following functionality:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<span class="emphasis"><em>testsuite_abi.h</em></span>,
|
<span class="emphasis"><em>testsuite_abi.h</em></span>,
|
||||||
<span class="emphasis"><em>testsuite_abi.cc</em></span>,
|
<span class="emphasis"><em>testsuite_abi.cc</em></span>,
|
||||||
<span class="emphasis"><em>testsuite_abi_check.cc</em></span>
|
<span class="emphasis"><em>testsuite_abi_check.cc</em></span>
|
||||||
|
|
@ -477,7 +477,7 @@ only default variables.
|
||||||
<span class="emphasis"><em>testsuite_hooks.cc</em></span>
|
<span class="emphasis"><em>testsuite_hooks.cc</em></span>
|
||||||
</p><p>
|
</p><p>
|
||||||
A large number of utilities, including:
|
A large number of utilities, including:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>VERIFY</p></li><li class="listitem"><p>set_memory_limits</p></li><li class="listitem"><p>verify_demangle</p></li><li class="listitem"><p>run_tests_wrapped_locale</p></li><li class="listitem"><p>run_tests_wrapped_env</p></li><li class="listitem"><p>try_named_locale</p></li><li class="listitem"><p>try_mkfifo</p></li><li class="listitem"><p>func_callback</p></li><li class="listitem"><p>counter</p></li><li class="listitem"><p>copy_tracker</p></li><li class="listitem"><p>copy_constructor</p></li><li class="listitem"><p>assignment_operator</p></li><li class="listitem"><p>destructor</p></li><li class="listitem"><p>pod_char, pod_int and associated char_traits specializations</p></li></ul></div></li><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>VERIFY</p></li><li class="listitem"><p>set_memory_limits</p></li><li class="listitem"><p>verify_demangle</p></li><li class="listitem"><p>run_tests_wrapped_locale</p></li><li class="listitem"><p>run_tests_wrapped_env</p></li><li class="listitem"><p>try_named_locale</p></li><li class="listitem"><p>try_mkfifo</p></li><li class="listitem"><p>func_callback</p></li><li class="listitem"><p>counter</p></li><li class="listitem"><p>copy_tracker</p></li><li class="listitem"><p>copy_constructor</p></li><li class="listitem"><p>assignment_operator</p></li><li class="listitem"><p>destructor</p></li><li class="listitem"><p>pod_char, pod_int and associated char_traits specializations</p></li></ul></div></li><li class="listitem"><p>
|
||||||
<span class="emphasis"><em>testsuite_io.h</em></span>
|
<span class="emphasis"><em>testsuite_io.h</em></span>
|
||||||
</p><p>
|
</p><p>
|
||||||
Error, exception, and constraint checking for
|
Error, exception, and constraint checking for
|
||||||
|
|
@ -491,10 +491,10 @@ only default variables.
|
||||||
</p><p>
|
</p><p>
|
||||||
A number of class abstractions for performance counters, and
|
A number of class abstractions for performance counters, and
|
||||||
reporting functions including:
|
reporting functions including:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="sect2" title="Special Topics"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="sect3" title="Qualifying Exception Safety Guarantees"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="section" title="Special Topics"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"/>Special Topics</h3></div></div></div><div class="section" title="Qualifying Exception Safety Guarantees"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"/>
|
||||||
Qualifying Exception Safety Guarantees
|
Qualifying Exception Safety Guarantees
|
||||||
<a id="id503957" class="indexterm"></a>
|
<a id="id501715" class="indexterm"/>
|
||||||
</h4></div></div></div><div class="sect4" title="Overview"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
|
</h4></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"/>Overview</h5></div></div></div><p>
|
||||||
Testing is composed of running a particular test sequence,
|
Testing is composed of running a particular test sequence,
|
||||||
and looking at what happens to the surrounding code when
|
and looking at what happens to the surrounding code when
|
||||||
exceptions are thrown. Each test is composed of measuring
|
exceptions are thrown. Each test is composed of measuring
|
||||||
|
|
@ -524,9 +524,9 @@ only default variables.
|
||||||
completes without an exception being thrown, assume all
|
completes without an exception being thrown, assume all
|
||||||
potential error paths have been exercised in a sequential
|
potential error paths have been exercised in a sequential
|
||||||
manner.
|
manner.
|
||||||
</p></div><div class="sect4" title="Existing tests"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.status"></a>
|
</p></div><div class="section" title="Existing tests"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.status"/>
|
||||||
Existing tests
|
Existing tests
|
||||||
</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Ad Hoc
|
Ad Hoc
|
||||||
</p><p>
|
</p><p>
|
||||||
For example,
|
For example,
|
||||||
|
|
@ -563,9 +563,9 @@ as the allocator type.
|
||||||
instrumentation to <code class="classname">iterator</code>
|
instrumentation to <code class="classname">iterator</code>
|
||||||
and <code class="classname">const_iterator</code> types that throw
|
and <code class="classname">const_iterator</code> types that throw
|
||||||
conditionally on iterator operations.
|
conditionally on iterator operations.
|
||||||
</p></li></ul></div></div><div class="sect4" title="C++0x Requirements Test Sequence Descriptions"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.containers"></a>
|
</p></li></ul></div></div><div class="section" title="C++0x Requirements Test Sequence Descriptions"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.containers"/>
|
||||||
C++0x Requirements Test Sequence Descriptions
|
C++0x Requirements Test Sequence Descriptions
|
||||||
</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Basic
|
Basic
|
||||||
</p><p>
|
</p><p>
|
||||||
Basic consistency on exception propagation tests. For
|
Basic consistency on exception propagation tests. For
|
||||||
|
|
@ -636,4 +636,4 @@ C++0x Requirements Test Sequence Descriptions
|
||||||
The general form demonstrated in
|
The general form demonstrated in
|
||||||
<code class="filename">testsuite/23_containers/list/requirements/exception/propagation_coherent.cc
|
<code class="filename">testsuite/23_containers/list/requirements/exception/propagation_coherent.cc
|
||||||
</code>. The instantiating test object is <code class="classname">__gnu_test::propagation_coherent</code> and is detailed in <code class="filename">testsuite/util/exception/safety.h</code>.
|
</code>. The instantiating test object is <code class="classname">__gnu_test::propagation_coherent</code> and is detailed in <code class="filename">testsuite/util/exception/safety.h</code>.
|
||||||
</p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Porting to New Hardware or Operating Systems </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html>
|
</p></li></ul></div></div></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td align="left" valign="top">Porting to New Hardware or Operating Systems </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7. Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="utilities.html" title="Chapter 6. Utilities"/><link rel="prev" href="memory.html" title="Memory"/><link rel="next" href="strings.html" title="Chapter 7. Strings"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
|
||||||
Utilities
|
Utilities
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section" title="Traits"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr/></div><div class="section" title="Traits"><div class="titlepage"><div><div><h2 class="title"><a id="std.util.traits"/>Traits</h2></div></div></div><p>
|
||||||
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7.
|
</p></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="memory.html">Prev</a> </td><td align="center"><a accesskey="u" href="utilities.html">Up</a></td><td align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr><tr><td align="left" valign="top">Memory </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Chapter 7.
|
||||||
Strings
|
Strings
|
||||||
|
|
||||||
</td></tr></table></div></body></html>
|
</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="intro.html" title="Part I. Introduction"/><link rel="prev" href="make.html" title="Make"/><link rel="next" href="using_headers.html" title="Headers"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I.
|
||||||
Introduction
|
Introduction
|
||||||
|
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 3. Using"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="sect2"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="sect1" title="Command Options"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
|
</th><td align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 3. Using"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"/>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section" title="Command Options"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.flags"/>Command Options</h2></div></div></div><p>
|
||||||
The set of features available in the GNU C++ library is shaped
|
The set of features available in the GNU C++ library is shaped
|
||||||
by
|
by
|
||||||
several <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Invoking-GCC.html" target="_top">GCC
|
several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Invoking-GCC.html">GCC
|
||||||
Command Options</a>. Options that impact libstdc++ are
|
Command Options</a>. Options that impact libstdc++ are
|
||||||
enumerated and detailed in the table below.
|
enumerated and detailed in the table below.
|
||||||
</p><p>
|
</p><p>
|
||||||
By default, <span class="command"><strong>g++</strong></span> is equivalent to <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
|
By default, <span class="command"><strong>g++</strong></span> is equivalent to <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
|
||||||
</p><div class="table"><a id="id444212"></a><p class="title"><b>Table 3.1. C++ Command Options</b></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++0x</code></td><td align="left">Use the working draft of the upcoming ISO C++0x standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++0x</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++0x <thread>, <future>,
|
</p><div class="table"><a id="id468937"/><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col style="text-align: left" class="c1"/><col style="text-align: left" class="c2"/></colgroup><thead><tr><th style="text-align: left">Option Flags</th><th style="text-align: left">Description</th></tr></thead><tbody><tr><td style="text-align: left"><code class="literal">-std=c++98</code></td><td style="text-align: left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td style="text-align: left"><code class="literal">-std=gnu++98</code></td><td style="text-align: left">As directly above, with GNU extensions.</td></tr><tr><td style="text-align: left"><code class="literal">-std=c++0x</code></td><td style="text-align: left">Use the working draft of the upcoming ISO C++0x standard.</td></tr><tr><td style="text-align: left"><code class="literal">-std=gnu++0x</code></td><td style="text-align: left">As directly above, with GNU extensions.</td></tr><tr><td style="text-align: left"><code class="literal">-fexceptions</code></td><td style="text-align: left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td style="text-align: left"><code class="literal">-frtti</code></td><td style="text-align: left">As above, but RTTI-free dialect.</td></tr><tr><td style="text-align: left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td style="text-align: left">For ISO C++0x <thread>, <future>,
|
||||||
<mutex>, or <condition_variable>.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
|
<mutex>, or <condition_variable>.</td></tr><tr><td style="text-align: left"><code class="literal">-fopenmp</code></td><td style="text-align: left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break"/></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="make.html">Prev</a> </td><td align="center"><a accesskey="u" href="intro.html">Up</a></td><td align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td align="left" valign="top">Make </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Headers</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Concurrency"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_dynamic_or_shared.html" title="Linking"/><link rel="next" href="using_exceptions.html" title="Exceptions"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr/></div><div class="section" title="Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.concurrency"/>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
|
||||||
of multithreaded applications which use the Standard C++
|
of multithreaded applications which use the Standard C++
|
||||||
library. This information is GCC-specific since the C++
|
library. This information is GCC-specific since the C++
|
||||||
standard does not address matters of multithreaded applications.
|
standard does not address matters of multithreaded applications.
|
||||||
</p><div class="sect2" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.prereq"></a>Prerequisites</h3></div></div></div><p>All normal disclaimers aside, multithreaded C++ application are
|
</p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.prereq"/>Prerequisites</h3></div></div></div><p>All normal disclaimers aside, multithreaded C++ application are
|
||||||
only supported when libstdc++ and all user code was built with
|
only supported when libstdc++ and all user code was built with
|
||||||
compilers which report (via <code class="code"> gcc/g++ -v </code>) the same thread
|
compilers which report (via <code class="code"> gcc/g++ -v </code>) the same thread
|
||||||
model and that model is not <span class="emphasis"><em>single</em></span>. As long as your
|
model and that model is not <span class="emphasis"><em>single</em></span>. As long as your
|
||||||
|
|
@ -33,11 +33,11 @@
|
||||||
-pthread is honored. Some other ports use other switches.
|
-pthread is honored. Some other ports use other switches.
|
||||||
AFAIK, none of this is properly documented anywhere other than
|
AFAIK, none of this is properly documented anywhere other than
|
||||||
in ``gcc -dumpspecs'' (look at lib and cpp entries).
|
in ``gcc -dumpspecs'' (look at lib and cpp entries).
|
||||||
</p></div><div class="sect2" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.thread_safety"></a>Thread Safety</h3></div></div></div><p>
|
</p></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.thread_safety"/>Thread Safety</h3></div></div></div><p>
|
||||||
We currently use the <a class="ulink" href="http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI STL</a> definition of thread safety.
|
We currently use the <a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</a> definition of thread safety.
|
||||||
</p><p>The library strives to be thread-safe when all of the following
|
</p><p>The library strives to be thread-safe when all of the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The system's libc is itself thread-safe,
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>The system's libc is itself thread-safe,
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
The compiler in use reports a thread model other than
|
The compiler in use reports a thread model other than
|
||||||
'single'. This can be tested via output from <code class="code">gcc
|
'single'. This can be tested via output from <code class="code">gcc
|
||||||
|
|
@ -53,7 +53,7 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
|
||||||
Requisite command-line flags are used for atomic operations
|
Requisite command-line flags are used for atomic operations
|
||||||
and threading. Examples of this include <code class="code">-pthread</code>
|
and threading. Examples of this include <code class="code">-pthread</code>
|
||||||
and <code class="code">-march=native</code>, although specifics vary
|
and <code class="code">-march=native</code>, although specifics vary
|
||||||
depending on the host environment. See <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html" target="_top">Machine
|
depending on the host environment. See <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html">Machine
|
||||||
Dependent Options</a>.
|
Dependent Options</a>.
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
An implementation of atomicity.h functions
|
An implementation of atomicity.h functions
|
||||||
|
|
@ -89,9 +89,9 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
|
||||||
this requirement includes both read and write access to objects;
|
this requirement includes both read and write access to objects;
|
||||||
unless otherwise documented as safe, do not assume that two threads
|
unless otherwise documented as safe, do not assume that two threads
|
||||||
may access a shared standard library object at the same time.
|
may access a shared standard library object at the same time.
|
||||||
</p></div><div class="sect2" title="Atomics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.atomics"></a>Atomics</h3></div></div></div><p>
|
</p></div><div class="section" title="Atomics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.atomics"/>Atomics</h3></div></div></div><p>
|
||||||
</p></div><div class="sect2" title="IO"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.io"></a>IO</h3></div></div></div><p>This gets a bit tricky. Please read carefully, and bear with me.
|
</p></div><div class="section" title="IO"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.io"/>IO</h3></div></div></div><p>This gets a bit tricky. Please read carefully, and bear with me.
|
||||||
</p><div class="sect3" title="Structure"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.structure"></a>Structure</h4></div></div></div><p>A wrapper
|
</p><div class="section" title="Structure"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.structure"/>Structure</h4></div></div></div><p>A wrapper
|
||||||
type called <code class="code">__basic_file</code> provides our abstraction layer
|
type called <code class="code">__basic_file</code> provides our abstraction layer
|
||||||
for the <code class="code">std::filebuf</code> classes. Nearly all decisions dealing
|
for the <code class="code">std::filebuf</code> classes. Nearly all decisions dealing
|
||||||
with actual input and output must be made in <code class="code">__basic_file</code>.
|
with actual input and output must be made in <code class="code">__basic_file</code>.
|
||||||
|
|
@ -99,7 +99,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
|
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
|
level is akin to providing locking within containers, and is not done
|
||||||
for the same reasons (see the links above).
|
for the same reasons (see the links above).
|
||||||
</p></div><div class="sect3" title="Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.defaults"></a>Defaults</h4></div></div></div><p>The __basic_file type is simply a collection of small wrappers around
|
</p></div><div class="section" title="Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.defaults"/>Defaults</h4></div></div></div><p>The __basic_file type is simply a collection of small wrappers around
|
||||||
the C stdio layer (again, see the link under Structure). We do no
|
the C stdio layer (again, see the link under Structure). We do no
|
||||||
locking ourselves, but simply pass through to calls to <code class="code">fopen</code>,
|
locking ourselves, but simply pass through to calls to <code class="code">fopen</code>,
|
||||||
<code class="code">fwrite</code>, and so forth.
|
<code class="code">fwrite</code>, and so forth.
|
||||||
|
|
@ -121,7 +121,7 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
|
||||||
contained in the stream formatting classes (e.g., setting up callbacks
|
contained in the stream formatting classes (e.g., setting up callbacks
|
||||||
inside an <code class="code">std::ofstream</code>), you need to guard such accesses
|
inside an <code class="code">std::ofstream</code>), you need to guard such accesses
|
||||||
like any other critical shared resource.
|
like any other critical shared resource.
|
||||||
</p></div><div class="sect3" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.future"></a>Future</h4></div></div></div><p> A
|
</p></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.future"/>Future</h4></div></div></div><p> A
|
||||||
second choice may be available for I/O implementations: libio. This is
|
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
|
disabled by default, and in fact will not currently work due to other
|
||||||
issues. It will be revisited, however.
|
issues. It will be revisited, however.
|
||||||
|
|
@ -146,10 +146,10 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
|
||||||
version will see calls from libstdc++ directly into the glibc already
|
version will see calls from libstdc++ directly into the glibc already
|
||||||
installed. For other platforms, a copy of the libio subsection will
|
installed. For other platforms, a copy of the libio subsection will
|
||||||
be built and included in libstdc++.
|
be built and included in libstdc++.
|
||||||
</p></div><div class="sect3" title="Alternatives"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.alt"></a>Alternatives</h4></div></div></div><p>Don't forget that other cstdio implementations are possible. You could
|
</p></div><div class="section" title="Alternatives"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.alt"/>Alternatives</h4></div></div></div><p>Don't forget that other cstdio implementations are possible. You could
|
||||||
easily write one to perform your own forms of locking, to solve your
|
easily write one to perform your own forms of locking, to solve your
|
||||||
"interesting" problems.
|
"interesting" problems.
|
||||||
</p></div></div><div class="sect2" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.containers"></a>Containers</h3></div></div></div><p>This section discusses issues surrounding the design of
|
</p></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.containers"/>Containers</h3></div></div></div><p>This section discusses issues surrounding the design of
|
||||||
multithreaded applications which use Standard C++ containers.
|
multithreaded applications which use Standard C++ containers.
|
||||||
All information in this section is current as of the gcc 3.0
|
All information in this section is current as of the gcc 3.0
|
||||||
release and all later point releases. Although earlier gcc
|
release and all later point releases. Although earlier gcc
|
||||||
|
|
@ -161,9 +161,9 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
|
||||||
threaded and non-threaded code), see Chapter 17.
|
threaded and non-threaded code), see Chapter 17.
|
||||||
</p><p>Two excellent pages to read when working with the Standard C++
|
</p><p>Two excellent pages to read when working with the Standard C++
|
||||||
containers and threads are
|
containers and threads are
|
||||||
<a class="ulink" href="http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI's
|
<a class="link" href="http://www.sgi.com/tech/stl/thread_safety.html">SGI's
|
||||||
http://www.sgi.com/tech/stl/thread_safety.html</a> and
|
http://www.sgi.com/tech/stl/thread_safety.html</a> and
|
||||||
<a class="ulink" href="http://www.sgi.com/tech/stl/Allocators.html" target="_top">SGI's
|
<a class="link" href="http://www.sgi.com/tech/stl/Allocators.html">SGI's
|
||||||
http://www.sgi.com/tech/stl/Allocators.html</a>.
|
http://www.sgi.com/tech/stl/Allocators.html</a>.
|
||||||
</p><p><span class="emphasis"><em>However, please ignore all discussions about the user-level
|
</p><p><span class="emphasis"><em>However, please ignore all discussions about the user-level
|
||||||
configuration of the lock implementation inside the STL
|
configuration of the lock implementation inside the STL
|
||||||
|
|
@ -202,4 +202,4 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
|
||||||
useful are details
|
useful are details
|
||||||
on <a class="link" href="memory.html#std.util.memory.allocator" title="Allocators">allocator</a>
|
on <a class="link" href="memory.html#std.util.memory.allocator" title="Allocators">allocator</a>
|
||||||
options and capabilities.
|
options and capabilities.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Linking </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td align="left" valign="top">Linking </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Linking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="sect2" title="Almost Nothing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_namespaces.html" title="Namespaces"/><link rel="next" href="using_concurrency.html" title="Concurrency"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr/></div><div class="section" title="Linking"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.linkage"/>Linking</h2></div></div></div><div class="section" title="Almost Nothing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"/>Almost Nothing</h3></div></div></div><p>
|
||||||
Or as close as it gets: freestanding. This is a minimal
|
Or as close as it gets: freestanding. This is a minimal
|
||||||
configuration, with only partial support for the standard
|
configuration, with only partial support for the standard
|
||||||
library. Assume only the following header files can be used:
|
library. Assume only the following header files can be used:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<code class="filename">cstdarg</code>
|
<code class="filename">cstdarg</code>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<code class="filename">cstddef</code>
|
<code class="filename">cstddef</code>
|
||||||
|
|
@ -22,12 +22,12 @@
|
||||||
<code class="filename">typeinfo</code>
|
<code class="filename">typeinfo</code>
|
||||||
</p></li></ul></div><p>
|
</p></li></ul></div><p>
|
||||||
In addition, throw in
|
In addition, throw in
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<code class="filename">cxxabi.h</code>.
|
<code class="filename">cxxabi.h</code>.
|
||||||
</p></li></ul></div><p>
|
</p></li></ul></div><p>
|
||||||
In the
|
In the
|
||||||
C++0x <a class="link" href="using.html#manual.intro.using.flags" title="Command Options">dialect</a> add
|
C++0x <a class="link" href="using.html#manual.intro.using.flags" title="Command Options">dialect</a> add
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
<code class="filename">initializer_list</code>
|
<code class="filename">initializer_list</code>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
<code class="filename">type_traits</code>
|
<code class="filename">type_traits</code>
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
No attempt is made to verify that only the minimal subset
|
No attempt is made to verify that only the minimal subset
|
||||||
identified above is actually used at compile time. Violations
|
identified above is actually used at compile time. Violations
|
||||||
are diagnosed as undefined symbols at link time.
|
are diagnosed as undefined symbols at link time.
|
||||||
</p></div><div class="sect2" title="Finding Dynamic or Shared Libraries"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.dynamic"></a>Finding Dynamic or Shared Libraries</h3></div></div></div><p>
|
</p></div><div class="section" title="Finding Dynamic or Shared Libraries"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.dynamic"/>Finding Dynamic or Shared Libraries</h3></div></div></div><p>
|
||||||
If the only library built is the static library
|
If the only library built is the static library
|
||||||
(<code class="filename">libstdc++.a</code>), or if
|
(<code class="filename">libstdc++.a</code>), or if
|
||||||
specifying static linking, this section is can be skipped. But
|
specifying static linking, this section is can be skipped. But
|
||||||
|
|
@ -51,10 +51,10 @@
|
||||||
But how?
|
But how?
|
||||||
</p><p>
|
</p><p>
|
||||||
A quick read of the relevant part of the GCC
|
A quick read of the relevant part of the GCC
|
||||||
manual, <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b" target="_top">Compiling
|
manual, <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b">Compiling
|
||||||
C++ Programs</a>, specifies linking against a C++
|
C++ Programs</a>, specifies linking against a C++
|
||||||
library. More details from the
|
library. More details from the
|
||||||
GCC <a class="ulink" href="http://gcc.gnu.org/faq.html#rpath" target="_top">FAQ</a>,
|
GCC <a class="link" href="http://gcc.gnu.org/faq.html#rpath">FAQ</a>,
|
||||||
which states <span class="emphasis"><em>GCC does not, by default, specify a
|
which states <span class="emphasis"><em>GCC does not, by default, specify a
|
||||||
location so that the dynamic linker can find dynamic libraries at
|
location so that the dynamic linker can find dynamic libraries at
|
||||||
runtime.</em></span>
|
runtime.</em></span>
|
||||||
|
|
@ -63,7 +63,7 @@ A quick read of the relevant part of the GCC
|
||||||
</p><p>
|
</p><p>
|
||||||
Methods vary for different platforms and different styles, and
|
Methods vary for different platforms and different styles, and
|
||||||
are printed to the screen during installation. To summarize:
|
are printed to the screen during installation. To summarize:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
At runtime set <code class="literal">LD_LIBRARY_PATH</code> in your
|
At runtime set <code class="literal">LD_LIBRARY_PATH</code> in your
|
||||||
environment correctly, so that the shared library for
|
environment correctly, so that the shared library for
|
||||||
libstdc++ can be found and loaded. Be certain that you
|
libstdc++ can be found and loaded. Be certain that you
|
||||||
|
|
@ -75,15 +75,15 @@ A quick read of the relevant part of the GCC
|
||||||
<span class="command"><strong>g++</strong></span>, which will in turn pass them on to
|
<span class="command"><strong>g++</strong></span>, which will in turn pass them on to
|
||||||
the linker. The exact format of the options is dependent on
|
the linker. The exact format of the options is dependent on
|
||||||
which linker you use:
|
which linker you use:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
GNU ld (default on Linux):
|
GNU ld (default on Linux):
|
||||||
<code class="literal">-Wl,-rpath,<code class="filename">destdir</code>/lib</code>
|
<code class="literal">-Wl,-rpath,</code><code class="filename">destdir/lib</code>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
IRIX ld:
|
IRIX ld:
|
||||||
<code class="literal">-Wl,-rpath,<code class="filename">destdir</code>/lib</code>
|
<code class="literal">-Wl,-rpath,</code><code class="filename">destdir/lib</code>
|
||||||
</p></li><li class="listitem"><p>
|
</p></li><li class="listitem"><p>
|
||||||
Solaris ld:
|
Solaris ld:
|
||||||
<code class="literal">-Wl,-R<code class="filename">destdir</code>/lib</code>
|
<code class="literal">-Wl,-R</code><code class="filename">destdir/lib</code>
|
||||||
</p></li></ul></div></li><li class="listitem"><p>
|
</p></li></ul></div></li><li class="listitem"><p>
|
||||||
Some linkers allow you to specify the path to the library by
|
Some linkers allow you to specify the path to the library by
|
||||||
setting <code class="literal">LD_RUN_PATH</code> in your environment
|
setting <code class="literal">LD_RUN_PATH</code> in your environment
|
||||||
|
|
@ -106,4 +106,4 @@ A quick read of the relevant part of the GCC
|
||||||
also installed, for use with Libtool. If you use Libtool to
|
also installed, for use with Libtool. If you use Libtool to
|
||||||
create your executables, these details are taken care of for
|
create your executables, these details are taken care of for
|
||||||
you.
|
you.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Namespaces </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Concurrency</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr><tr><td align="left" valign="top">Namespaces </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Concurrency</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" C++ , exception , error , exception neutrality , exception safety , exception propagation , -fno-exceptions " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Exceptions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" C++ , exception , error , exception neutrality , exception safety , exception propagation , -fno-exceptions "/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_concurrency.html" title="Concurrency"/><link rel="next" href="debug.html" title="Debugging Support"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr/></div><div class="section" title="Exceptions"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.exceptions"/>Exceptions</h2></div></div></div><p>
|
||||||
The C++ language provides language support for stack unwinding
|
The C++ language provides language support for stack unwinding
|
||||||
with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
|
with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
|
||||||
the <code class="literal">throw</code> keyword.
|
the <code class="literal">throw</code> keyword.
|
||||||
|
|
@ -12,7 +12,7 @@ exceptional circumstances.
|
||||||
</p><p>
|
</p><p>
|
||||||
Two general topics of discussion follow:
|
Two general topics of discussion follow:
|
||||||
exception neutrality and exception safety.
|
exception neutrality and exception safety.
|
||||||
</p><div class="sect2" title="Exception Safety"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p>
|
</p><div class="section" title="Exception Safety"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"/>Exception Safety</h3></div></div></div><p>
|
||||||
What is exception-safe code?
|
What is exception-safe code?
|
||||||
</p><p>
|
</p><p>
|
||||||
Will define this as reasonable and well-defined behavior by classes
|
Will define this as reasonable and well-defined behavior by classes
|
||||||
|
|
@ -27,7 +27,7 @@ exception neutrality and exception safety.
|
||||||
Using the layered approach from Abrahams, can classify library
|
Using the layered approach from Abrahams, can classify library
|
||||||
components as providing set levels of safety. These will be called
|
components as providing set levels of safety. These will be called
|
||||||
exception guarantees, and can be divided into three categories.
|
exception guarantees, and can be divided into three categories.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
One. Don't throw.
|
One. Don't throw.
|
||||||
</p><p>
|
</p><p>
|
||||||
As specified in 23.2.1 general container requirements. Applicable
|
As specified in 23.2.1 general container requirements. Applicable
|
||||||
|
|
@ -51,7 +51,7 @@ exception neutrality and exception safety.
|
||||||
Member functions <code class="function">insert</code> of a single
|
Member functions <code class="function">insert</code> of a single
|
||||||
element, <code class="function">push_back</code>, <code class="function">push_front</code>,
|
element, <code class="function">push_back</code>, <code class="function">push_front</code>,
|
||||||
and <code class="function">rehash</code>.
|
and <code class="function">rehash</code>.
|
||||||
</p></li></ul></div></div><div class="sect2" title="Exception Neutrality"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"></a>Exception Neutrality</h3></div></div></div><p>
|
</p></li></ul></div></div><div class="section" title="Exception Neutrality"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"/>Exception Neutrality</h3></div></div></div><p>
|
||||||
Simply put, once thrown an exception object should continue in
|
Simply put, once thrown an exception object should continue in
|
||||||
flight unless handled explicitly. In practice, this means
|
flight unless handled explicitly. In practice, this means
|
||||||
propagating exceptions should not be swallowed in
|
propagating exceptions should not be swallowed in
|
||||||
|
|
@ -75,7 +75,7 @@ exception neutrality and exception safety.
|
||||||
Unfortunately, this tends to be more of a guideline than a strict
|
Unfortunately, this tends to be more of a guideline than a strict
|
||||||
rule as applied to the standard library. As such, the following is
|
rule as applied to the standard library. As such, the following is
|
||||||
a list of known problem areas where exceptions are not propagated.
|
a list of known problem areas where exceptions are not propagated.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
|
||||||
Input/Output
|
Input/Output
|
||||||
</p><p>
|
</p><p>
|
||||||
The destructor <code class="function">ios_base::Init::~Init()</code>
|
The destructor <code class="function">ios_base::Init::~Init()</code>
|
||||||
|
|
@ -101,7 +101,7 @@ exception neutrality and exception safety.
|
||||||
The constructors of <code class="classname">thread</code> that take a
|
The constructors of <code class="classname">thread</code> that take a
|
||||||
callable function argument swallow all exceptions resulting from
|
callable function argument swallow all exceptions resulting from
|
||||||
executing the function argument.
|
executing the function argument.
|
||||||
</p></li></ul></div></div><div class="sect2" title="Doing without"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p>
|
</p></li></ul></div></div><div class="section" title="Doing without"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"/>Doing without</h3></div></div></div><p>
|
||||||
C++ is a language that strives to be as efficient as is possible
|
C++ is a language that strives to be as efficient as is possible
|
||||||
in delivering features. As such, considerable care is used by both
|
in delivering features. As such, considerable care is used by both
|
||||||
language implementer and designers to make sure unused features
|
language implementer and designers to make sure unused features
|
||||||
|
|
@ -113,7 +113,7 @@ exception neutrality and exception safety.
|
||||||
support <code class="literal">try</code> and <code class="literal">catch</code> blocks
|
support <code class="literal">try</code> and <code class="literal">catch</code> blocks
|
||||||
and thrown objects. (Language support
|
and thrown objects. (Language support
|
||||||
for <code class="literal">-fno-exceptions</code> is documented in the GNU
|
for <code class="literal">-fno-exceptions</code> is documented in the GNU
|
||||||
GCC <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options" target="_top">manual</a>.)
|
GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options">manual</a>.)
|
||||||
</p><p>Before detailing the library support
|
</p><p>Before detailing the library support
|
||||||
for <code class="literal">-fno-exceptions</code>, first a passing note on
|
for <code class="literal">-fno-exceptions</code>, first a passing note on
|
||||||
the things lost when this flag is used: it will break exceptions
|
the things lost when this flag is used: it will break exceptions
|
||||||
|
|
@ -220,7 +220,7 @@ exception neutrality and exception safety.
|
||||||
substitution of the C language keyword
|
substitution of the C language keyword
|
||||||
<code class="literal">const</code> with the uglified
|
<code class="literal">const</code> with the uglified
|
||||||
doppelganger <code class="literal">__const</code>.
|
doppelganger <code class="literal">__const</code>.
|
||||||
</p></div><div class="sect2" title="Compatibility"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="sect3" title="With C"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p>
|
</p></div><div class="section" title="Compatibility"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"/>Compatibility</h3></div></div></div><div class="section" title="With C"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"/>With <code class="literal">C</code></h4></div></div></div><p>
|
||||||
C language code that is expecting to interoperate with C++ should be
|
C language code that is expecting to interoperate with C++ should be
|
||||||
compiled with <code class="literal">-fexceptions</code>. This will make
|
compiled with <code class="literal">-fexceptions</code>. This will make
|
||||||
debugging a C language function called as part of C++-induced stack
|
debugging a C language function called as part of C++-induced stack
|
||||||
|
|
@ -235,7 +235,7 @@ is called.
|
||||||
getting these details right. For GNU systems, all appropriate parts
|
getting these details right. For GNU systems, all appropriate parts
|
||||||
of the GNU C library are already compiled
|
of the GNU C library are already compiled
|
||||||
with <code class="literal">-fexceptions</code>.
|
with <code class="literal">-fexceptions</code>.
|
||||||
</p></div><div class="sect3" title="With POSIX thread cancellation"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
|
</p></div><div class="section" title="With POSIX thread cancellation"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"/>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
|
||||||
GNU systems re-use some of the exception handling mechanisms to
|
GNU systems re-use some of the exception handling mechanisms to
|
||||||
track control flow for <code class="literal">POSIX</code> thread cancellation.
|
track control flow for <code class="literal">POSIX</code> thread cancellation.
|
||||||
</p><p>
|
</p><p>
|
||||||
|
|
@ -266,63 +266,42 @@ is called.
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{ this->_M_setstate(ios_base::badbit); }
|
{ this->_M_setstate(ios_base::badbit); }
|
||||||
</pre></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id417334"></a><p><span class="biblioid">
|
</pre></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"/>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id473786"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.opengroup.org/austin" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
||||||
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
</em>. </span><span class="pagenums">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="pagenums">
|
|
||||||
2.9.5 Thread Cancellation
|
2.9.5 Thread Cancellation
|
||||||
. </span><span class="copyright">Copyright © 2008
|
. </span><span class="copyright">Copyright © 2008
|
||||||
The Open Group/The Institute of Electrical and Electronics
|
The Open Group/The Institute of Electrical and Electronics
|
||||||
Engineers, Inc.
|
Engineers, Inc.
|
||||||
. </span></p></div><div class="biblioentry"><a id="id444298"></a><p><span class="biblioid">
|
. </span></p></div><div class="biblioentry"><a id="id473819"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.boost.org/community/error_handling.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Error and Exception Handling
|
||||||
Error and Exception Handling
|
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
|
|
||||||
Boost
|
Boost
|
||||||
. </span></span></p></div><div class="biblioentry"><a id="id390281"></a><p><span class="biblioid">
|
. </span></span></p></div><div class="biblioentry"><a id="id473852"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.boost.org/community/exception_safety.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Exception-Safety in Generic Components
|
||||||
Exception-Safety in Generic Components
|
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
|
|
||||||
Boost
|
Boost
|
||||||
. </span></span></p></div><div class="biblioentry"><a id="id404291"></a><p><span class="biblioid">
|
. </span></span></p></div><div class="biblioentry"><a id="id473885"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Standard Library Exception Policy
|
||||||
Standard Library Exception Policy
|
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
|
|
||||||
WG21 N1077
|
WG21 N1077
|
||||||
. </span></span></p></div><div class="biblioentry"><a id="id443907"></a><p><span class="biblioid">
|
. </span></span></p></div><div class="biblioentry"><a id="id473919"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
ia64 c++ abi exception handling
|
||||||
ia64 c++ abi exception handling
|
</em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
|
|
||||||
GNU
|
GNU
|
||||||
. </span></span></p></div><div class="biblioentry"><a id="id444623"></a><p><span class="biblioid">
|
. </span></span></p></div><div class="biblioentry"><a id="id473952"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
Appendix E: Standard-Library Exception Safety
|
||||||
Appendix E: Standard-Library Exception Safety
|
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="id473978"/><p><span class="citetitle"><em class="citetitle">
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry" title="Exceptional C++"><a id="id444488"></a><p><span class="title"><i>
|
|
||||||
Exceptional C++
|
Exceptional C++
|
||||||
</i>. </span><span class="pagenums">
|
</em>. </span><span class="pagenums">
|
||||||
Exception-Safety Issues and Techniques
|
Exception-Safety Issues and Techniques
|
||||||
. </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="id403652"></a><p><span class="biblioid">
|
. </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="id473998"/><p><span class="biblioid">
|
||||||
<a class="ulink" href="http://gcc.gnu.org/PR25191" target="_top">
|
. </span><span class="citetitle"><em class="citetitle">
|
||||||
<em class="citetitle">
|
GCC Bug 25191: exception_defines.h #defines try/catch
|
||||||
GCC Bug 25191: exception_defines.h #defines try/catch
|
</em>. </span></p></div></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td align="left" valign="top">Concurrency </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
|
||||||
</em>
|
|
||||||
</a>
|
|
||||||
. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
|
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Macros"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_headers.html" title="Headers"/><link rel="next" href="using_namespaces.html" title="Namespaces"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr/></div><div class="section" title="Macros"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.macros"/>Macros</h2></div></div></div><p>
|
||||||
All library macros begin with <code class="code">_GLIBCXX_</code>.
|
All library macros begin with <code class="code">_GLIBCXX_</code>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Furthermore, all pre-processor macros, switches, and
|
Furthermore, all pre-processor macros, switches, and
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
Experimenting with different values with the expectation of
|
Experimenting with different values with the expectation of
|
||||||
consistent linkage requires changing the config headers before
|
consistent linkage requires changing the config headers before
|
||||||
building/installing the library.
|
building/installing the library.
|
||||||
</p><div class="variablelist"><dl><dt><span class="term"><code class="code">_GLIBCXX_DEPRECATED</code></span></dt><dd><p>
|
</p><div class="variablelist"><dl><dt><span class="term"><code class="code">_GLIBCXX_USE_DEPRECATED</code></span></dt><dd><p>
|
||||||
Defined by default. Not configurable. ABI-changing. Turning this off
|
Defined by default. Not configurable. ABI-changing. Turning this off
|
||||||
removes older ARM-style iostreams code, and other anachronisms
|
removes older ARM-style iostreams code, and other anachronisms
|
||||||
from the API. This macro is dependent on the version of the
|
from the API. This macro is dependent on the version of the
|
||||||
|
|
@ -74,4 +74,4 @@
|
||||||
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
|
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
|
||||||
using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile
|
using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile
|
||||||
mode</a>.
|
mode</a>.
|
||||||
</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
|
</p></dd></dl></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td align="left" valign="top">Headers </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Namespaces"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="sect2" title="Available Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="using.html" title="Chapter 3. Using"/><link rel="prev" href="using_macros.html" title="Macros"/><link rel="next" href="using_dynamic_or_shared.html" title="Linking"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr/></div><div class="section" title="Namespaces"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using.namespaces"/>Namespaces</h2></div></div></div><div class="section" title="Available Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"/>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
|
||||||
within namespace std." This includes namespaces nested
|
within namespace std." This includes namespaces nested
|
||||||
within <code class="code">namespace std</code>, such as <code class="code">namespace
|
within <code class="code">namespace std</code>, such as <code class="code">namespace
|
||||||
std::tr1</code>.
|
std::tr1</code>.
|
||||||
|
|
@ -11,12 +11,12 @@ but necessary for interoperability.
|
||||||
</p></li><li class="listitem"><p>__gnu_</p><p>Indicating one of several GNU extensions. Choices
|
</p></li><li class="listitem"><p>__gnu_</p><p>Indicating one of several GNU extensions. Choices
|
||||||
include <code class="code">__gnu_cxx</code>, <code class="code">__gnu_debug</code>, <code class="code">__gnu_parallel</code>,
|
include <code class="code">__gnu_cxx</code>, <code class="code">__gnu_debug</code>, <code class="code">__gnu_parallel</code>,
|
||||||
and <code class="code">__gnu_pbds</code>.
|
and <code class="code">__gnu_pbds</code>.
|
||||||
</p></li></ul></div><p> A complete list of implementation namespaces (including namespace contents) is available in the generated source <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html" target="_top">documentation</a>.
|
</p></li></ul></div><p> A complete list of implementation namespaces (including namespace contents) is available in the generated source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html">documentation</a>.
|
||||||
</p></div><div class="sect2" title="namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.std"></a>namespace std</h3></div></div></div><p>
|
</p></div><div class="section" title="namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.std"/>namespace std</h3></div></div></div><p>
|
||||||
One standard requirement is that the library components are defined
|
One standard requirement is that the library components are defined
|
||||||
in <code class="code">namespace std::</code>. Thus, in order to use these types or
|
in <code class="code">namespace std::</code>. Thus, in order to use these types or
|
||||||
functions, one must do one of two things:
|
functions, one must do one of two things:
|
||||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>put a kind of <span class="emphasis"><em>using-declaration</em></span> in your source
|
</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>put a kind of <span class="emphasis"><em>using-declaration</em></span> in your source
|
||||||
(either <code class="code">using namespace std;</code> or i.e. <code class="code">using
|
(either <code class="code">using namespace std;</code> or i.e. <code class="code">using
|
||||||
std::string;</code>) This approach works well for individual source files, but
|
std::string;</code>) This approach works well for individual source files, but
|
||||||
should not be used in a global context, like header files.
|
should not be used in a global context, like header files.
|
||||||
|
|
@ -25,7 +25,7 @@ qualified name</em></span> for each library symbol
|
||||||
(i.e. <code class="code">std::string</code>, <code class="code">std::cout</code>) Always can be
|
(i.e. <code class="code">std::string</code>, <code class="code">std::cout</code>) Always can be
|
||||||
used, and usually enhanced, by strategic use of typedefs. (In the
|
used, and usually enhanced, by strategic use of typedefs. (In the
|
||||||
cases where the qualified verbiage becomes unwieldy.)
|
cases where the qualified verbiage becomes unwieldy.)
|
||||||
</p></li></ul></div></div><div class="sect2" title="Using Namespace Composition"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.comp"></a>Using Namespace Composition</h3></div></div></div><p>
|
</p></li></ul></div></div><div class="section" title="Using Namespace Composition"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.comp"/>Using Namespace Composition</h3></div></div></div><p>
|
||||||
Best practice in programming suggests sequestering new data or
|
Best practice in programming suggests sequestering new data or
|
||||||
functionality in a sanely-named, unique namespace whenever
|
functionality in a sanely-named, unique namespace whenever
|
||||||
possible. This is considered an advantage over dumping everything in
|
possible. This is considered an advantage over dumping everything in
|
||||||
|
|
@ -58,4 +58,4 @@ namespace gtk
|
||||||
std::string;</code> (depending on whether the system has
|
std::string;</code> (depending on whether the system has
|
||||||
libstdc++ in <code class="code">std::</code> or not). (ideas from
|
libstdc++ in <code class="code">std::</code> or not). (ideas from
|
||||||
Llewelly and Karl Nelson)
|
Llewelly and Karl Nelson)
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Macros </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Linking</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><td align="center"><a accesskey="u" href="using.html">Up</a></td><td align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr><tr><td align="left" valign="top">Macros </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Linking</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6. Utilities</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents" /><link rel="prev" href="bk01pt02ch05s02.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6.
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapter 6. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/><meta name="keywords" content=" ISO C++ , library "/><link rel="home" href="../spine.html" title="The GNU C++ Library"/><link rel="up" href="bk01pt02.html" title="Part II. Standard Contents"/><link rel="prev" href="bk01pt02ch05s02.html" title="Concept Checking"/><link rel="next" href="pairs.html" title="Pairs"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6.
|
||||||
Utilities
|
Utilities
|
||||||
|
|
||||||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><th width="60%" align="center">Part II.
|
</th></tr><tr><td align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||||||
Standard Contents
|
Standard Contents
|
||||||
</th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 6. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6.
|
</th><td align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr/></div><div class="chapter" title="Chapter 6. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"/>Chapter 6.
|
||||||
Utilities
|
Utilities
|
||||||
<a id="id410153" class="indexterm"></a>
|
<a id="id475620" class="indexterm"/>
|
||||||
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section" title="Functors"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
|
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section" title="Functors"><div class="titlepage"><div><div><h2 class="title"><a id="std.util.functors"/>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
|
||||||
get slightly the wrong idea. In the interest of not reinventing
|
get slightly the wrong idea. In the interest of not reinventing
|
||||||
the wheel, we will refer you to the introduction to the functor
|
the wheel, we will refer you to the introduction to the functor
|
||||||
concept written by SGI as chapter of their STL, in
|
concept written by SGI as chapter of their STL, in
|
||||||
<a class="ulink" href="http://www.sgi.com/tech/stl/functors.html" target="_top">their
|
<a class="link" href="http://www.sgi.com/tech/stl/functors.html">their
|
||||||
http://www.sgi.com/tech/stl/functors.html</a>.
|
http://www.sgi.com/tech/stl/functors.html</a>.
|
||||||
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
|
</p></div></div><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td align="left" valign="top">Concept Checking </td><td align="center"><a accesskey="h" href="../spine.html">Home</a></td><td align="right" valign="top"> Pairs</td></tr></table></div></body></html>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue