diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/doc/xml/manual/utilities.xml | |
download | cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2 cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'libstdc++-v3/doc/xml/manual/utilities.xml')
-rw-r--r-- | libstdc++-v3/doc/xml/manual/utilities.xml | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/libstdc++-v3/doc/xml/manual/utilities.xml b/libstdc++-v3/doc/xml/manual/utilities.xml new file mode 100644 index 000000000..5c3a8fd48 --- /dev/null +++ b/libstdc++-v3/doc/xml/manual/utilities.xml @@ -0,0 +1,124 @@ +<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" + xml:id="std.util" xreflabel="Utilities"> +<?dbhtml filename="utilities.html"?> + +<info><title> + Utilities + <indexterm><primary>Utilities</primary></indexterm> +</title> + <keywordset> + <keyword> + ISO C++ + </keyword> + <keyword> + library + </keyword> + </keywordset> +</info> + + + +<!-- Section 01 : Functors --> +<section xml:id="std.util.functors" xreflabel="Functors"><info><title>Functors</title></info> +<?dbhtml filename="functors.html"?> + + <para>If you don't know what functors are, you're not alone. Many people + get slightly the wrong idea. In the interest of not reinventing + the wheel, we will refer you to the introduction to the functor + concept written by SGI as chapter of their STL, in + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/functors.html">their + http://www.sgi.com/tech/stl/functors.html</link>. + </para> +</section> + +<!-- Section 02 : Pairs --> +<section xml:id="std.util.pairs" xreflabel="Pairs"><info><title>Pairs</title></info> +<?dbhtml filename="pairs.html"?> + + <para>The <code>pair<T1,T2></code> is a simple and handy way to + carry around a pair of objects. One is of type T1, and another of + type T2; they may be the same type, but you don't get anything + extra if they are. The two members can be accessed directly, as + <code>.first</code> and <code>.second</code>. + </para> + <para>Construction is simple. The default ctor initializes each member + with its respective default ctor. The other simple ctor, + </para> + <programlisting> + pair (const T1& x, const T2& y); + </programlisting> + <para>does what you think it does, <code>first</code> getting <code>x</code> + and <code>second</code> getting <code>y</code>. + </para> + <para>There is a copy constructor, but it requires that your compiler + handle member function templates: + </para> + <programlisting> + template <class U, class V> pair (const pair<U,V>& p); + </programlisting> + <para>The compiler will convert as necessary from U to T1 and from + V to T2 in order to perform the respective initializations. + </para> + <para>The comparison operators are done for you. Equality + of two <code>pair<T1,T2></code>s is defined as both <code>first</code> + members comparing equal and both <code>second</code> members comparing + equal; this simply delegates responsibility to the respective + <code>operator==</code> functions (for types like MyClass) or builtin + comparisons (for types like int, char, etc). + </para> + <para> + The less-than operator is a bit odd the first time you see it. It + is defined as evaluating to: + </para> + <programlisting> + x.first < y.first || + ( !(y.first < x.first) && x.second < y.second ) + </programlisting> + <para>The other operators are not defined using the <code>rel_ops</code> + functions above, but their semantics are the same. + </para> + <para>Finally, there is a template function called <function>make_pair</function> + that takes two references-to-const objects and returns an + instance of a pair instantiated on their respective types: + </para> + <programlisting> + pair<int,MyClass> p = make_pair(4,myobject); + </programlisting> + +</section> + +<!-- Section 03 : Memory --> +<section xml:id="std.util.memory" xreflabel="Memory"><info><title>Memory</title></info> +<?dbhtml filename="memory.html"?> + + <para> + Memory contains three general areas. First, function and operator + calls via <function>new</function> and <function>delete</function> + operator or member function calls. Second, allocation via + <classname>allocator</classname>. And finally, smart pointer and + intelligent pointer abstractions. + </para> + + <!-- Section 01 : allocator --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="allocator.xml"> + </xi:include> + + <!-- Section 02 : auto_ptr --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="auto_ptr.xml"> + </xi:include> + + <!-- Section 03 : shared_ptr --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="shared_ptr.xml"> + </xi:include> + +</section> + +<!-- Section 04 : Traits --> +<section xml:id="std.util.traits" xreflabel="Traits"><info><title>Traits</title></info> +<?dbhtml filename="traits.html"?> + + <para> + </para> +</section> + +</chapter> |