This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] pb_ds docbook


.... well, almost. Here's the WIP.

-benjamin
Index: doc/xml/manual/mt_allocator.xml
===================================================================
--- doc/xml/manual/mt_allocator.xml	(revision 174917)
+++ doc/xml/manual/mt_allocator.xml	(working copy)
@@ -1,8 +1,8 @@
-<section xmlns="http://docbook.org/ns/docbook"; version="5.0" 
+<chapter xmlns="http://docbook.org/ns/docbook"; version="5.0" 
 	 xml:id="manual.ext.allocator.mt" xreflabel="mt allocator">
 <?dbhtml filename="mt_allocator.html"?>
 
-<info><title>mt_allocator</title>
+<info><title>The mt_allocator</title>
   <keywordset>
     <keyword>
       ISO C++
@@ -552,4 +552,4 @@
 
 </section>
 
-</section>
+</chapter>
Index: doc/xml/manual/bitmap_allocator.xml
===================================================================
--- doc/xml/manual/bitmap_allocator.xml	(revision 174917)
+++ doc/xml/manual/bitmap_allocator.xml	(working copy)
@@ -1,8 +1,8 @@
-<section xmlns="http://docbook.org/ns/docbook"; version="5.0" 
+<chapter xmlns="http://docbook.org/ns/docbook"; version="5.0" 
 	 xml:id="manual.ext.allocator.bitmap" xreflabel="bitmap_allocator">
 <?dbhtml filename="bitmap_allocator.html"?>
 
-<info><title>bitmap_allocator</title>
+<info><title>The bitmap_allocator</title>
   <keywordset>
     <keyword>
       ISO C++
@@ -558,4 +558,4 @@
 
 </section>
 
-</section>
+</chapter>
Index: doc/xml/manual/policy_based_data_structures.xml
===================================================================
--- doc/xml/manual/policy_based_data_structures.xml	(revision 0)
+++ doc/xml/manual/policy_based_data_structures.xml	(revision 0)
@@ -0,0 +1,652 @@
+<chapter xmlns="http://docbook.org/ns/docbook"; version="5.0"
+	 xml:id="manual.ext.containers.pbds" xreflabel="PBDS">
+<info>
+  <title>Policy-Based Data Structures</title>
+  <keywordset>
+    <keyword>
+      ISO C++
+    </keyword>
+    <keyword>
+      policy
+    </keyword>
+    <keyword>
+      container
+    </keyword>
+    <keyword>
+      associated
+    </keyword>
+    <keyword>
+      tree
+    </keyword>
+    <keyword>
+      trie
+    </keyword>
+    <keyword>
+      hash
+    </keyword>
+    <keyword>
+      metaprogramming
+    </keyword>
+  </keywordset>
+</info>
+<?dbhtml filename="policy_based_data_structures.html"?>
+
+<!-- 2006-04-01 Ami Tavory -->
+<!-- 2011-05-25 Benjamin Kosnik -->
+
+<section xml:id="pbds.intro">
+<info><title>Intro</title></info>
+
+<para>
+  This is a library of policy-based elementary data structures:
+  associative containers and priority queues. It is designed for
+  high-performance, flexibility, semantic safety, and conformance to
+  the corresponding containers in <literal>std</literal> and
+  <literal>std::tr1</literal> (except for some points where it differs
+  by design).
+</para>
+
+<para>
+  Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
+  Laboratories), and Benjamin Kosnik (Red Hat).
+</para>
+<para>
+</para>
+
+<section xml:id="pbds.intro.issues">
+<info><title>Problems and Issues</title></info>
+<para>
+</para>
+
+<para>
+  This section describes what problems the library attempts to
+  solve.
+</para>
+
+<para>
+  An attempt is made to categorize the wide variety of possible
+  container designs in terms of performance-impacting factors. These
+  performance factors are translated into design policies and
+  incorporated into container design.
+</para>
+
+<para>
+  There is tension between unravelling factors into a coherent set of
+  policies. Every attempt is made to make a minimal set of
+  factors. However, in many cases multiple factors make for long
+  template names. Every attempt is made to alias and use typedefs in
+  the source files, but the generated names for external symbols can
+  be large for binary files or debuggers.
+</para>
+
+<para>
+  In many cases, the longer names allow capabilities and behaviours
+  controlled by macros to also be unamibiguously emitted as distinct
+  generated names.
+</para>
+
+<para>
+  Specific issues found while unraveling performance factors in the
+  design of associative containers and priority queues follow.
+</para>
+
+<section xml:id="pbds.intro.issues.associative">
+<info><title>Associative Container Performance Factors</title></info>
+
+<para>
+  Associative containers depend on their composite policies to a very
+  large extent. Implicitly hard-wiring policies can hamper their
+  performance and limit their functionality. An efficient hash-based
+  container, for example, requires policies for testing key
+  equivalence, hashing keys, translating hash values into positions
+  within the hash table, and determining when and how to resize the
+  table internally. A tree-based container can efficiently support
+  order statistics, i.e. the ability to query what is the order of
+  each key within the sequence of keys in the container, but only if
+  the container is supplied with a policy to internally update
+  meta-data. There are many other such examples.
+</para>
+
+<para>
+  Ideally, all associative containers would share the same
+  interface. Unfortunately, underlying data structures and mapping
+  semantics differentiate between different containers. For example,
+  suppose one writes a generic function manipulating an associative
+  container.
+</para>
+
+<programlisting>
+template&lt;typename Cntnr&gt;
+  void
+  some_op_sequence(Cntnr&amp; r_cnt)
+  {
+    ...
+  }
+</programlisting>
+
+<para>
+  Given this, then what can one assume about the instantiating
+  container? The answer varies according to its underlying data
+  structure. If the underlying data structure of
+  <literal>Cntnr</literal> is based on a tree or trie, then the order
+  of elements is well defined; otherwise, it is not, in general. If
+  the underlying data structure of <literal>Cntnr</literal> is based
+  on a collision-chaining hash table, then modifying
+  r_<literal>Cntnr</literal> will not invalidate its iterators' order;
+  if the underlying data structure is a probing hash table, then this
+  is not the case. If the underlying data structure is based on a tree
+  or trie, then a reference to the container can efficiently be split;
+  otherwise, it cannot, in general. If the underlying data structure
+  is a red-black tree, then splitting a reference to the container is
+  exception-free; if it is an ordered-vector tree, exceptions can be
+  thrown.
+</para>
+
+</section>
+
+<section xml:id="pbds.intro.issues.priority_queue">
+<info><title>Priority Que Performance Factors</title></info>
+
+<para>
+  Priority queues are useful when one needs to efficiently access a
+  minimum (or maximum) value as the set of values changes.
+</para>
+
+<para>
+  Most useful data structures for priority queues have a relatively
+  simple structure, as they are geared toward relatively simple
+  requirements. Unfortunately, these structures do not support access
+  to an arbitrary value, which turns out to be necessary in many
+  algorithms. Say, decreasing an arbitrary value in a graph
+  algorithm. Therefore, some extra mechanism is necessary and must be
+  invented for accessing arbitrary values. There are at least two
+  alternatives: embedding an associative container in a priority
+  queue, or allowing cross-referencing through iterators. The first
+  solution adds significant overhead; the second solution requires a
+  precise definition of iterator invalidation. Which is the next
+  point...
+</para>
+
+<para>
+  Priority queues, like hash-based containers, store values in an
+  order that is meaningless and undefined externally. For example, a
+  <code>push</code> operation can internally reorganize the
+  values. Because of this characteristic, describing a priority
+  queues' iterator is difficult: on one hand, the values to which
+  iterators point can remain valid, but on the other, the logical
+  order of iterators can change unpredictably.
+</para>
+
+<para>
+  Roughly speaking, any element that is both inserted to a priority
+  queue (e.g. through <code>push</code>) and removed
+  from it (e.g., through <code>pop</code>), incurs a
+  logarithmic overhead (in the amortized sense). Different underlying
+  data structures place the actual cost differently: some are
+  optimized for amortized complexity, whereas others guarantee that
+  specific operations only have a constant cost. One underlying data
+  structure might be chosen if modifying a value is frequent
+  (Dijkstra's shortest-path algorithm), whereas a different one might
+  be chosen otherwise. Unfortunately, an array-based binary heap - an
+  underlying data structure that optimizes (in the amortized sense)
+  <code>push</code> and <code>pop</code> operations, differs from the
+  others in terms of its invalidation guarantees. Other design
+  decisions also impact the cost and placement of the overhead, at the
+  expense of more difference in the the kinds of operations that the
+  underlying data structure can support. These differences pose a
+  challenge when creating a uniform interface for priority queues.
+</para>
+</section>
+</section>
+
+<section xml:id="pbds.intro.motivation">
+<info><title>Solutions, Motivation</title></info>
+<para>
+</para>
+<!-- motivation.html -->
+</section>
+
+
+</section>
+
+
+<section xml:id="containers.pbds.using">
+<info><title>Using</title></info>
+<para></para>
+
+<section xml:id="pbds.using.prereq">
+<info><title>Prerequisites</title></info>
+
+<para>The library contains only header files, and does not require any
+other libraries except the standard C++ library . All classes are
+defined in namespace <code>__gnu_pbds</code>. The library internally
+uses macros beginning with <code>PB_DS</code>, but
+<code>#undef</code>s anything it <code>#define</code>s (except for
+header guards). Compiling the library in an environment where macros
+beginning in <code>PB_DS</code> are defined, may yield unpredictable
+results in compilation, execution, or both.</para>
+
+<para>
+Further dependencies are necessary to create the visual output for the
+performance tests. To create these graphs, two additional packages
+will be needed: <command>pychart</command> and <command>Beautiful
+Soup</command>.
+</para>
+</section>
+
+<section xml:id="pbds.using.tutorial">
+<info><title>Tutorial</title></info>
+
+<section xml:id="pbds.using.tutorial.basic">
+<info><title>Basic Use</title></info>
+
+<para>
+  For the most part, the policy-based containers containers in
+  namespace <literal>__gnu_pbds</literal> have the same interface as
+  the equivalent containers in the standard C++ library, except for
+  the names used for the container classes themselves. For example,
+  this shows basic operations on a collision-chaining hash-based
+  container:
+</para>
+<programlisting>
+#include &lt;ext/pb_ds/assoc_container.h&gt;
+
+int main()
+{
+  __gnu_pbds::cc_hash_table&lt;int, char&gt; c;
+  c[2] = 'b';
+  assert(c.find(1) == c.end());
+};
+</programlisting>
+
+<para>
+  The container is called
+  <classname>__gnu_pbds::cc_hash_table</classname> instead of
+  <classname>std::unordered_map</classname>, since <quote>unordered
+  map</quote> does not necessarily mean a hash-based map as implied by
+  the C++ library (C++0x or TR1). For example, list-based associative
+  containers, which are very useful for the construction of
+  "multimaps," are also unordered.
+</para>
+
+<!--- Associative-Container Performance Tests::Observations::Mapping-Semantics
+    Considerations 
+-->
+
+<para>This snippet shows a red-black tree based container:</para>
+
+<programlisting>
+#include &lt;ext/pb_ds/assoc_container.h&gt;
+
+int main()
+{
+  __gnu_pbds::tree&lt;int, char&gt; c;
+  c[2] = 'b';
+  assert(c.find(2) != c.end());
+};
+</programlisting>
+
+ <para>The container is called <classname>tree</classname> instead of
+ <classname>map</classname> since the underlying data structures are
+ being named with specificity.
+ </para>
+
+<para>
+  The member function naming convention is to strive to be the same as
+  the equivalent member functions in other C++ standard library
+  containers. The familiar methods are unchanged:
+  <function>begin</function>, <function>end</function>,
+  <function>size</function>, <function>empty</function>, and
+  <function>clear</function>. 
+</para>
+
+<para>
+  This isn't to say that things are exactly as one would expect, given
+  the container requirments and interfaces in the C++ standard.
+</para>
+
+<para>
+  The names of containers' policies and policy accessors are
+  different then the usual. For example, if <type>hash_type</type> is
+some type of hash-based container, then</para>
+
+<programlisting>
+hash_type::hash_fn
+</programlisting>
+
+<para>
+gives the type of its hash functor, and if <varname>obj</varname> is
+some hash-based container object, then
+</para>
+
+<programlisting>
+obj.get_hash_fn()
+</programlisting>
+
+<para>will return a reference to its hash-functor object.</para>
+
+
+<para>
+  Similarly, if <type>tree_type</type> is some type of tree-based
+  container, then
+</para>
+
+<programlisting>
+tree_type::cmp_fn
+</programlisting>
+
+<para>
+gives the type of its comparison functor, and if <varname>obj</varname> is
+some tree-based container object, then
+</para>
+
+<programlisting>
+obj.get_cmp_fn()
+</programlisting>
+
+<para>will return a reference to its comparison-functor object.</para>
+
+<para>
+  It would be nice to give names consistent with those in the existing
+  C++ standard (inclusive of TR1). Unfortunately, these standard
+  containers don't consistently name types and methods. For example,
+  <classname>std::tr1::unordered_map</classname> uses
+  <type>hasher</type> for the hash functor, but
+  <classname>std::map</classname> uses <type>key_compare</type> for
+  the comparison functor. Also, we could not find an accessor for
+  <classname>std::tr1::unordered_map</classname>'s hash functor, but
+  <classname>std::map</classname> uses <classname>compare</classname>
+  for accessing the comparison functor.
+</para> 
+
+<para>
+  Instead, <literal>__gnu_pbds</literal> attempts to be internally
+  consistent, and uses standard-derived terminology if possible.
+</para>
+
+<para>
+  Another source of difference is in scope:
+  <literal>__gnu_pbds</literal> contains more types of associative
+  containers than the standard C++ library, and more opportunities
+  to configure these new containers, since different types of
+  associative containers are useful in different settings.
+</para>
+
+<para>
+ Namespace <literal>__gnu_pbds</literal> contains different classes for
+ hash-based containers, tree-based containers, trie-based containers,
+ and list-based containers.
+</para>
+
+<!--
+    interface.html
+-->
+
+<!--
+    Design
+    hash_based_containers.html
+    tree_based_containers.html
+    trie_based_containers.html
+    lu_based_containers.html
+-->
+<para>
+  Since associative containers share parts of their interface, they
+  are organized as a class hierarchy.
+</para>
+
+<!--
+    interface.html
+-->
+
+ <para>Each type or method is defined in the most-common ancestor
+    in which it makes sense.
+ </para>
+
+ <para>For example, all associative containers support iteration
+ expressed in the following form:
+ </para>
+
+<programlisting>
+    const_iterator
+    begin() const;
+    
+    iterator
+    begin();
+
+    const_iterator
+    end() const;
+    
+    iterator
+    end();
+</programlisting>
+
+ <para>
+   But not all containers contain or use hash functors. Yet, both
+   collision-chaining and (general) probing hash-based associative
+   containers have a hash functor, so
+   <classname>basic_hash_table</classname> contains the interface:
+ </para>
+
+<programlisting>
+    const hash_fn&amp;
+    get_hash_fn() const;
+        
+    hash_fn&amp;
+    get_hash_fn();
+</programlisting>
+
+<para>
+  so all hash-based associative containers inherit the same
+  hash-functor accessor methods.
+</para>
+<!--
+    XXX ds_gen.html data structure genericity
+-->
+</section> <!--basic use -->
+
+<section xml:id="pbds.using.tutorial.configuring">
+<info><title>Configuring via template parameters</title></info>
+</section>
+
+<section xml:id="pbds.using.tutorial.traits">
+<info><title>Querying Containers' Attributes</title></info>
+</section>
+
+<section xml:id="pbds.using.tutorial.point_range_iteration">
+<info><title>Point and Range Iteration</title></info>
+</section>
+
+<section xml:id="pbds.using.tutorial.set_vs_map">
+<info><title>Distinguishing Between Maps and Sets</title></info>
+</section>
+
+
+</section>
+
+<section xml:id="pbds.using.concepts">
+<info><title>Concepts</title></info>
+
+<section xml:id="pbds.using.concepts.null_type">
+<info><title>Null Policy Classes</title></info>
+<para>
+  Associative containers are typically parametrized by various
+  policies. For example, a hash-based associative container is
+  parametrized by a hash-functor, transforming each key into an
+  non-negative numerical type. Each such value is then further mapped
+  into a position within the table. The mapping of a key into a
+  position within the table is therefore a two-step process.
+</para>
+<para>
+  In some cases, instantiations are redundant. For example, when the
+  keys are integers, it is possible to use a redundant hash policy,
+  which transforms each key into its value.
+</para>
+<para>
+  In some other cases, these policies are irrelevant.  For example, a
+  hash-based associative container might transform keys into positions
+  within a table by a different method than the two-step method
+  described above. In such a case, the hash functor is simply
+  irrelevant.
+</para>
+
+<para>
+  When a policy is either redundant or irrelevant, it can be replaced
+  by <classname>null_type</classname>.
+</para>
+
+  <para>
+    For example, a <emphasis>set</emphasis> is an associative
+    container with one of its template parameters (the one for the
+    mapped type) replaced with <classname>null_type</classname>. Other
+    places simplifications are made possible with this technique
+    include node updates in tree and trie data structures, and hash
+    and probe functions for hash data structures.
+  </para>
+</section>
+
+<section xml:id="pbds.using.concepts.keys">
+<info><title>Primary and Secondary Keys and Associated Containers</title></info>
+<para>
+    There are no associative containers which
+    allow multiple values with equivalent keys (such as the standard C++
+    <classname>std::multimap</classname>, for example). Instead, one maps the
+    unique part of a key - the primary key, into an
+    associative-container of the (originally) non-unique parts of
+    the key - the secondary key. A primary associative-container is
+    an associative container of primary keys; a secondary
+    associative-container is an associative container of secondary
+    keys.
+</para>
+
+</section>
+
+<section xml:id="pbds.using.concepts.point_and_range">
+<info><title>Point and Range Iterators</title></info>
+
+    <para>
+      Iterator concepts are bifurcated in this design, and are
+      comprised of point-type and range-type iteration.
+    </para>
+
+    <para>
+      A point-type iterator is an iterator that refers to a specific
+      element as returned through an
+      associative-container's <function>find</function> method.
+    </para>
+
+    <para>
+      A range-type iterator is an iterator that is used to go over a
+      sequence of elements, as returned by a container's
+      <function>find</function> method.
+    </para>
+
+    <para>
+      A point-type method is a method that
+      returns a point-type iterator; a range-type method is a method
+      that returns a range-type iterator.
+    </para>
+
+    <para>For most containers, these types are synonymous; for
+    self-organizing containers, such as hash-based containers or
+    priority queues, these are inherently different (in any
+    implementation, including that of C++ standard library
+    components), but in this design, it is made explicit. They are
+    distinct types.
+    </para>
+
+</section>
+
+<section xml:id="pbds.using.concepts.invalidation">
+<info><title>Invalidation Guarantees</title></info>
+<para>
+If one manipulates a container object, then iterators previously
+obtained from it can be invalidated. In some cases a
+previously-obtained iterator cannot be de-referenced; in other cases,
+the iterator's next or previous element might have changed
+unpredictably. This corresponds exactly to the question whether a
+point-type or range-type iterator (see previous concept) is valid or
+not. In this design, one can query a container (in compile time) about
+its invalidation guarantees.
+</para>
+</section>
+
+</section>
+
+<section xml:id="pbds.using.associative">
+<info><title>Associative Containers Examples</title></info>
+<para></para>
+</section>
+
+<section xml:id="pbds.using.priority_queue">
+<info><title>Priority Queue Examples</title></info>
+<para></para>
+</section>
+
+
+
+</section>
+
+<section xml:id="containers.pbds.design">
+<info><title>Design</title></info>
+<para></para>
+
+<section xml:id="pbds.design.genericity_and_interface">
+<info><title>Genericity and Interface</title></info>
+<para></para>
+</section>
+
+<section xml:id="pbds.design.associative">
+<info><title>Associative</title></info>
+<para></para>
+
+<section xml:id="pbds.design.associative.tree">
+<info><title>Tree</title></info>
+<para></para>
+</section>
+
+<section xml:id="pbds.design.associative.trie">
+<info><title>Trie</title></info>
+<para></para>
+</section>
+
+<section xml:id="pbds.design.associative.hash">
+<info><title>Hash</title></info>
+<para></para>
+</section>
+
+<section xml:id="pbds.design.associative.list">
+<info><title>List</title></info>
+<para></para>
+</section>
+
+</section>
+
+<section xml:id="pbds.design.priority_queue">
+<info><title>Priority Queue</title></info>
+<para></para>
+</section>
+
+</section>
+
+<section xml:id="pbds.test">
+<info><title>Testing</title></info>
+<para></para>
+
+<section xml:id="pbds.test.regression">
+<info><title>Regression</title></info>
+<para></para>
+</section>
+
+<section xml:id="pbds.test.performance">
+<info><title>Performance</title></info>
+<para></para>
+</section>
+
+</section>
+
+<section xml:id="pbds.biblio">
+<info><title>Bibliography</title></info>
+<para></para>
+</section>
+
+</chapter>
Index: doc/xml/manual/extensions.xml
===================================================================
--- doc/xml/manual/extensions.xml	(revision 174917)
+++ doc/xml/manual/extensions.xml	(working copy)
@@ -19,11 +19,11 @@
 
 
 <preface><info><title/></info>
-  
 <para>
-  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,
-  and some just seemed to appear on the doorstep.
+  Here we will make an attempt at describing the non-Standard
+  extensions to the library.  Some of these are from older versions of
+  standard library components, namely SGI's STL, and some of these are
+  GNU's.
 </para>
 <para><emphasis>Before</emphasis> you leap in and use any of these
 extensions, be aware of two things:
@@ -100,59 +100,57 @@
 </chapter>
 
 <!-- Chapter 02 : Debug Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" href="debug_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" 
+	    href="debug_mode.xml">
 </xi:include>
 
 <!-- Chapter 03 : Parallel Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" href="parallel_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" 
+	    href="parallel_mode.xml">
 </xi:include>
 
 <!-- Chapter 04 : Profile Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" href="profile_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" 
+	    href="profile_mode.xml">
 </xi:include>
 
 
-<!-- Chapter 05 : Allocators -->
-<chapter xml:id="manual.ext.allocator" xreflabel="Allocators"><info><title>Allocators</title></info>
-<?dbhtml filename="ext_allocators.html"?>
-  
+<!-- XXX -->
+<!-- Allocators -->
+<!-- Chapter 06 : __mt_alloc -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" 
+	    href="mt_allocator.xml">
+</xi:include>
 
-  <!-- Section 01 : __mt_alloc -->
-  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" href="mt_allocator.xml">
-  </xi:include>
+<!-- Chapter 07 : bitmap_allocator -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" 
+	    href="bitmap_allocator.xml">
+</xi:include>
 
-  <!-- Section 02 : bitmap_allocator -->
-  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" href="bitmap_allocator.xml">
-  </xi:include>
+<!-- Containers -->
+<!-- Chapter 08 : Policy-Based Data Structures -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; parse="xml" 
+	    href="policy_based_data_structures.xml">
+</xi:include>
 
-</chapter>
-
-<!-- Chapter 06 : Containers -->
-<chapter xml:id="manual.ext.containers" xreflabel="Containers"><info><title>Containers</title></info>
+<!-- Chapter 09 : HP/SGI -->
+<chapter xml:id="manual.ext.containers" xreflabel="Containers">
+  <info><title>HP/SGI Extensions</title></info>
 <?dbhtml filename="ext_containers.html"?>
   
-  <para>
-  </para>
-  <section xml:id="manual.ext.containers.pbds" xreflabel="Policy Based Data Structures"><info><title>Policy Based Data Structures</title></info>
-    
-    <para>
-      <link xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html";>More details here</link>.
-    </para>
-  </section>
+  <section xml:id="manual.ext.containers.sgi" xreflabel="SGI ext">
+    <info><title>Backwards Compatibility</title></info>
 
-  <section xml:id="manual.ext.containers.sgi" xreflabel="SGI ext"><info><title>HP/SGI</title></info>
-    
-    <para>
+    <para>A few extensions and nods to backwards-compatibility have
+    been made with containers.  Those dealing with older SGI-style
+    allocators are dealt with elsewhere.  The remaining ones all deal
+    with bits:
     </para>
+    <para>The old pre-standard <code>bit_vector</code> class is
+    present for backwards compatibility.  It is simply a typedef for
+    the <code>vector&lt;bool&gt;</code> specialization.
+    </para>
 
-<para>A few extensions and nods to backwards-compatibility have been made with
-   containers.  Those dealing with older SGI-style allocators are dealt with
-   elsewhere.  The remaining ones all deal with bits:
-</para>
-<para>The old pre-standard <code>bit_vector</code> class is present for
-   backwards compatibility.  It is simply a typedef for the
-   <code>vector&lt;bool&gt;</code> specialization.
-</para>
 <para>The <code>bitset</code> class has a number of extensions, described in the
    rest of this item.  First, we'll mention that this implementation of
    <code>bitset&lt;N&gt;</code> is specialized for cases where N number of
@@ -197,7 +195,7 @@
   </section>
 
 
-  <section xml:id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep"><info><title>Deprecated HP/SGI</title></info>
+  <section xml:id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep"><info><title>Deprecated</title></info>
     
 
    <para>
Index: doc/Makefile.in
===================================================================
--- doc/Makefile.in	(revision 174917)
+++ doc/Makefile.in	(working copy)
@@ -384,6 +384,7 @@
 	${xml_dir}/manual/mt_allocator.xml \
 	${xml_dir}/manual/numerics.xml \
 	${xml_dir}/manual/parallel_mode.xml \
+	${xml_dir}/manual/policy_based_data_structures.xml \
 	${xml_dir}/manual/prerequisites.xml \
 	${xml_dir}/manual/profile_mode.xml \
 	${xml_dir}/manual/shared_ptr.xml \
Index: doc/Makefile.am
===================================================================
--- doc/Makefile.am	(revision 174917)
+++ doc/Makefile.am	(working copy)
@@ -339,6 +339,7 @@
 	${xml_dir}/manual/mt_allocator.xml \
 	${xml_dir}/manual/numerics.xml \
 	${xml_dir}/manual/parallel_mode.xml \
+	${xml_dir}/manual/policy_based_data_structures.xml \
 	${xml_dir}/manual/prerequisites.xml \
 	${xml_dir}/manual/profile_mode.xml \
 	${xml_dir}/manual/shared_ptr.xml \

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]