Fix documentation for Set-Like Containers

llvm-svn: 237677
This commit is contained in:
Artyom Skrobov 2015-05-19 10:21:12 +00:00
parent f46548166d
commit 6277c01b5a

View File

@ -1105,10 +1105,10 @@ If you have a set-like data structure that is usually small and whose elements
are reasonably small, a ``SmallSet<Type, N>`` is a good choice. This set has are reasonably small, a ``SmallSet<Type, N>`` is a good choice. This set has
space for N elements in place (thus, if the set is dynamically smaller than N, space for N elements in place (thus, if the set is dynamically smaller than N,
no malloc traffic is required) and accesses them with a simple linear search. no malloc traffic is required) and accesses them with a simple linear search.
When the set grows beyond 'N' elements, it allocates a more expensive When the set grows beyond N elements, it allocates a more expensive
representation that guarantees efficient access (for most types, it falls back representation that guarantees efficient access (for most types, it falls back
to std::set, but for pointers it uses something far better, :ref:`SmallPtrSet to :ref:`std::set <dss_set>`, but for pointers it uses something far better,
<dss_smallptrset>`. :ref:`SmallPtrSet <dss_smallptrset>`.
The magic of this class is that it handles small sets extremely efficiently, but The magic of this class is that it handles small sets extremely efficiently, but
gracefully handles extremely large sets without loss of efficiency. The gracefully handles extremely large sets without loss of efficiency. The
@ -1120,16 +1120,31 @@ and erasing, but does not support iteration.
llvm/ADT/SmallPtrSet.h llvm/ADT/SmallPtrSet.h
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
SmallPtrSet has all the advantages of ``SmallSet`` (and a ``SmallSet`` of ``SmallPtrSet`` has all the advantages of ``SmallSet`` (and a ``SmallSet`` of
pointers is transparently implemented with a ``SmallPtrSet``), but also supports pointers is transparently implemented with a ``SmallPtrSet``), but also supports
iterators. If more than 'N' insertions are performed, a single quadratically iterators. If more than N insertions are performed, a single quadratically
probed hash table is allocated and grows as needed, providing extremely probed hash table is allocated and grows as needed, providing extremely
efficient access (constant time insertion/deleting/queries with low constant efficient access (constant time insertion/deleting/queries with low constant
factors) and is very stingy with malloc traffic. factors) and is very stingy with malloc traffic.
Note that, unlike ``std::set``, the iterators of ``SmallPtrSet`` are invalidated Note that, unlike :ref:`std::set <dss_set>`, the iterators of ``SmallPtrSet``
whenever an insertion occurs. Also, the values visited by the iterators are not are invalidated whenever an insertion occurs. Also, the values visited by the
visited in sorted order. iterators are not visited in sorted order.
.. _dss_stringset:
llvm/ADT/StringSet.h
^^^^^^^^^^^^^^^^^^^^
``StringSet`` is a thin wrapper around :ref:`StringMap\<char\> <dss_stringmap>`,
and it allows efficient storage and retrieval of unique strings.
Functionally analogous to ``SmallSet<StringRef>``, ``StringSet`` also suports
iteration. (The iterator dereferences to a ``StringMapEntry<char>``, so you
need to call ``i->getKey()`` to access the item of the StringSet.) On the
other hand, ``StringSet`` doesn't support range-insertion and
copy-construction, which :ref:`SmallSet <dss_smallset>` and :ref:`SmallPtrSet
<dss_smallptrset>` do support.
.. _dss_denseset: .. _dss_denseset:
@ -1297,8 +1312,9 @@ never use hash_set and unordered_set because they are generally very expensive
(each insertion requires a malloc) and very non-portable. (each insertion requires a malloc) and very non-portable.
std::multiset is useful if you're not interested in elimination of duplicates, std::multiset is useful if you're not interested in elimination of duplicates,
but has all the drawbacks of std::set. A sorted vector (where you don't delete but has all the drawbacks of :ref:`std::set <dss_set>`. A sorted vector
duplicate entries) or some other approach is almost always better. (where you don't delete duplicate entries) or some other approach is almost
always better.
.. _ds_map: .. _ds_map: