<li><a href="#dss_stringmap">"llvm/ADT/StringMap.h"</a></li>
<li><a href="#dss_indexedmap">"llvm/ADT/IndexedMap.h"</a></li>
<li><a href="#dss_densemap">"llvm/ADT/DenseMap.h"</a></li>
- <li><a href="#dss_multiimplmap">"llvm/ADT/MultiImplMap.h"</a></li>
- <li><a href="#dss_flatarraymap">"llvm/ADT/FlatArrayMap.h"</a></li>
- <li><a href="#dss_smallmap">"llvm/ADT/SmallMap.h"</a></li>
<li><a href="#dss_valuemap">"llvm/ADT/ValueMap.h"</a></li>
<li><a href="#dss_intervalmap">"llvm/ADT/IntervalMap.h"</a></li>
<li><a href="#dss_map"><map></a></li>
+ <li><a href="#dss_mapvector">"llvm/ADT/MapVector.h"</a></li>
<li><a href="#dss_inteqclasses">"llvm/ADT/IntEqClasses.h"</a></li>
<li><a href="#dss_immutablemap">"llvm/ADT/ImmutableMap.h"</a></li>
<li><a href="#dss_othermap">Other Map-Like Container Options</a></li>
</dl>
<p>These five templates can be used with any classes, whether they have a
-v-table or not. To add support for these templates, you simply need to add
-<tt>classof</tt> static methods to the class you are interested casting
-to. Describing this is currently outside the scope of this document, but there
-are lots of examples in the LLVM source base.</p>
+v-table or not. If you want to add support for these templates, see the
+document <a href="HowToSetUpLLVMStyleRTTI.html">How to set up LLVM-style
+RTTI for your class hierarchy </a>.
+</p>
</div>
<div>
-<p>The <tt>Twine</tt> class is an efficient way for APIs to accept concatenated
-strings. For example, a common LLVM paradigm is to name one instruction based on
+<p>The <tt><a href="/doxygen/classllvm_1_1Twine.html">Twine</a></tt> class is an
+efficient way for APIs to accept concatenated strings. For example, a common
+LLVM paradigm is to name one instruction based on
the name of another instruction with a suffix, for example:</p>
<div class="doc_code">
</pre>
</div>
-<p>The <tt>Twine</tt> class is effectively a
-lightweight <a href="http://en.wikipedia.org/wiki/Rope_(computer_science)">rope</a>
+<p>The <tt>Twine</tt> class is effectively a lightweight
+<a href="http://en.wikipedia.org/wiki/Rope_(computer_science)">rope</a>
which points to temporary (stack allocated) objects. Twines can be implicitly
constructed as the result of the plus operator applied to strings (i.e., a C
-strings, an <tt>std::string</tt>, or a <tt>StringRef</tt>). The twine delays the
-actual concatenation of strings until it is actually required, at which point
-it can be efficiently rendered directly into a character array. This avoids
-unnecessary heap allocation involved in constructing the temporary results of
-string concatenation. See
-"<tt><a href="/doxygen/classllvm_1_1Twine_8h-source.html">llvm/ADT/Twine.h</a></tt>"
-for more information.</p>
+strings, an <tt>std::string</tt>, or a <tt>StringRef</tt>). The twine delays
+the actual concatenation of strings until it is actually required, at which
+point it can be efficiently rendered directly into a character array. This
+avoids unnecessary heap allocation involved in constructing the temporary
+results of string concatenation. See
+"<tt><a href="/doxygen/Twine_8h_source.html">llvm/ADT/Twine.h</a></tt>"
+and <a href="#dss_twine">here</a> for more information.</p>
<p>As with a <tt>StringRef</tt>, <tt>Twine</tt> objects point to external memory
and should almost never be stored or mentioned directly. They are intended
</div>
-<!-- _______________________________________________________________________ -->
-<h4>
- <a name="dss_multiimplmap">"llvm/ADT/MultiImplMap.h"</a>
-</h4>
-
-<div>
-
-<p>
-MultiImplMap is map that has two modes, one for small amount of elements and
-one for big amount. User should set map implementation for both of them.
-User also should set the maximum possible number of elements for small mode.
-</p>
-
-<p>
-If user want to use MultiImplMap instead of
-<a href="#dss_densemap">DenseMap</a>, he should pass template parameter
-DenseMapCompatible = true. Note, that in this case map implementations
-should present additional DenseMap specific methods (see below):
-<code>isPointerIntoBucketsArray</code>, <code>getPointerIntoBucketsArray</code>
-and <code>FindAndConstruct</code>.
-</p>
-
-<p>
-Initially MultiImplMap uses small mode and small map implementation. It
-triggered to the big mode when the number of contained elements exceeds
-maximum possible elements for small mode.
-</p>
-
-</div>
-
-<!-- _______________________________________________________________________ -->
-<h4>
- <a name="dss_flatarraymap">"llvm/ADT/FlatArrayMap.h"</a>
-</h4>
-
-<div>
-
-<p>
-FlatArrayMap optimized for small amount of elements. It uses flat array
-implementation inside:
-</p>
-<pre>[ key0, value0, key1, value1, ... keyN, valueN ]</pre>
-
-
-<p>
-User should pass key type, mapped type (type of value), and maximum
-number of elements.
-</p>
-
-<p>
-After maximum number of elements is reached, map declines any further
-attempts to insert new elements ("insert" method returns <end(),
-false>).
-</p>
-
-<p>
-FlatArrayMap has interface that is compatible with
-<a href="#dss_densemap">DenseMap</a>, so user can replace it with DenseMap
-without any code changing and vice versa.
-</p>
-
-</div>
-
-<!-- _______________________________________________________________________ -->
-<h4>
- <a name="dss_smallmap">"llvm/ADT/SmallMap.h"</a>
-</h4>
-
-<div>
-
-<p>
-SmallMap is wrapper around <a href="#dss_multiimplmap">MultiImplMap</a>.
-It uses <a href="#dss_flatarraymap">FlatArrayMap</a> for small mode, and
-<a href="#dss_densemap">DenseMap</a> for big mode.
-</p>
-
-</div>
-
<!-- _______________________________________________________________________ -->
<h4>
<a name="dss_intervalmap">"llvm/ADT/IntervalMap.h"</a>
</div>
+
+<!-- _______________________________________________________________________ -->
+<h4>
+ <a name="dss_mapvector">"llvm/ADT/MapVector.h"</a>
+</h4>
+<div>
+
+<p> MapVector<KeyT,ValueT> provides a subset of the DenseMap interface.
+ The main difference is that the iteration order is guaranteed to be
+ the insertion order, making it an easy (but somewhat expensive) solution
+ for non-deterministic iteration over maps of pointers. </p>
+
+<p> It is implemented by mapping from key to an index in a vector of key,value
+ pairs. This provides fast lookup and iteration, but has two main drawbacks:
+ The key is stored twice and it doesn't support removing elements. </p>
+
+</div>
+
<!-- _______________________________________________________________________ -->
<h4>
<a name="dss_inteqclasses">"llvm/ADT/IntEqClasses.h"</a>
*Ty, LinkageTypes Linkage, const std::string &N = "", Module* Parent = 0)</tt>
<p>Constructor used when you need to create new <tt>Function</tt>s to add
- the the program. The constructor must specify the type of the function to
+ the program. The constructor must specify the type of the function to
create and what type of linkage the function should have. The <a
href="#FunctionType"><tt>FunctionType</tt></a> argument
specifies the formal arguments and return value for the function. The same