summaryrefslogtreecommitdiffstats
path: root/docs/ProgrammersManual.rst
diff options
context:
space:
mode:
authorSean Silva <silvas@purdue.edu>2013-03-22 23:41:29 +0000
committerSean Silva <silvas@purdue.edu>2013-03-22 23:41:29 +0000
commit0059eb1e2e779f6537c1da9d9ff4679e19e23628 (patch)
tree30191d73dfffb7cb0bd3a2950d4673b845f2285c /docs/ProgrammersManual.rst
parentdc3beb90178fc316f63790812b22201884eaa017 (diff)
downloadexternal_llvm-0059eb1e2e779f6537c1da9d9ff4679e19e23628.zip
external_llvm-0059eb1e2e779f6537c1da9d9ff4679e19e23628.tar.gz
external_llvm-0059eb1e2e779f6537c1da9d9ff4679e19e23628.tar.bz2
[docs] Document usage of SmallVectorImpl in interfaces.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177775 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/ProgrammersManual.rst')
-rw-r--r--docs/ProgrammersManual.rst27
1 files changed, 27 insertions, 0 deletions
diff --git a/docs/ProgrammersManual.rst b/docs/ProgrammersManual.rst
index 4fc4597..eed12e9 100644
--- a/docs/ProgrammersManual.rst
+++ b/docs/ProgrammersManual.rst
@@ -626,6 +626,33 @@ SmallVectors are most useful when on the stack.
SmallVector also provides a nice portable and efficient replacement for
``alloca``.
+.. note::
+
+ Prefer to use ``SmallVectorImpl<T>`` in interfaces.
+
+ In APIs that don't care about the "small size" (most?), prefer to use
+ the ``SmallVectorImpl<T>`` class, which is basically just the "vector
+ header" (and methods) without the elements allocated after it. Note that
+ ``SmallVector<T, N>`` inherits from ``SmallVectorImpl<T>`` so the
+ conversion is implicit and costs nothing. E.g.
+
+ .. code-block:: c++
+
+ // BAD: Clients cannot pass e.g. SmallVector<Foo, 4>.
+ hardcodedSmallSize(SmallVector<Foo, 2> &Out);
+ // GOOD: Clients can pass any SmallVector<Foo, N>.
+ allowsAnySmallSize(SmallVectorImpl<Foo> &Out);
+
+ void someFunc() {
+ SmallVector<Foo, 8> Vec;
+ hardcodedSmallSize(Vec); // Error.
+ allowsAnySmallSize(Vec); // Works.
+ }
+
+ Even though it has "``Impl``" in the name, this is so widely used that
+ it really isn't "private to the implementation" anymore. A name like
+ ``SmallVectorHeader`` would be more appropriate.
+
.. _dss_vector:
<vector>