Squashed 'third_party/boostorg/preprocessor/' content from commit 56090c5

Change-Id: I8c0a13225778c3751a35945439d5304bd9e639ef
git-subtree-dir: third_party/boostorg/preprocessor
git-subtree-split: 56090c56b5c78418b6dbe8c3c2ba576395152f83
diff --git a/doc/data/arrays.html b/doc/data/arrays.html
new file mode 100644
index 0000000..d968c4f
--- /dev/null
+++ b/doc/data/arrays.html
@@ -0,0 +1,55 @@
+<html>
+  <head>
+    <meta content="text/html; charset=windows-1252" http-equiv="content-type">
+    <title>arrays.html</title>
+    <link rel="stylesheet" type="text/css" href="../styles.css">
+  </head>
+  <body>
+    <h4>Arrays</h4>
+    <div> An <i>array</i> is a data structure consisting of a two-element <i>tuple</i>.&nbsp;
+      The first element is the number of elements in the <i>array</i>.&nbsp;
+      The second element is another <i>tuple</i> of the elements in the <i>array</i>.&nbsp;
+      For example, </div>
+    <div class="code"> (<i>3</i>, (<i>a</i>, <i>b</i>, <i>c</i>)) </div>
+    <div> ...is an <i>array</i> of <i>3</i> elements--<i>a</i>, <i>b</i>, and
+      <i>c</i>. </div>
+    <div> The primary strength of <i>arrays</i> is that they store their own
+      size.&nbsp; Because of this, access to elements does not require the
+      size.&nbsp; It only requires that an element exists at a certain index. </div>
+    <div> This allows macro parameters to be variable in size and allows data
+      states to change size without the user explicitly keeping track of the
+      size independently.<br>
+      <br>
+      An <i>array </i>can be empty and have no elements. An empty array has a
+      0 size. The notation for an empty array is '(0,())'.<br>
+      <br>
+      <span style="font-style: italic;"> </span></div>
+    <div>With variadic macro support a <i>tuple </i>has all of the
+      functionality as an <i>array</i>, knows its own size, and is easier
+      syntactically to use. Because of that an <i>array</i> should be used, as
+      opposed to a <i>tuple</i>, only if your compiler does not support
+      variadic macros. The only advantage an <i>array </i>has over a <i>tuple
+      </i>is that an <i>array </i>can be empty while a <i>tuple </i>always
+      has at least one element and therefore can never have a size of 0.<br>
+      <br>
+      Elements of an <i>array</i> can be extracted with <b>BOOST_PP_ARRAY_ELEM</b>,
+      an <i>array's</i> size can be extracted with <b>BOOST_PP_ARRAY_SIZE</b>,
+      and an <i>array</i> can be converted to the more primitive <i>tuple</i>
+      data structure with <b>BOOST_PP_ARRAY_DATA</b>. </div>
+    <h4>Primitives</h4>
+    <ul>
+      <li><a href="../ref/array_data.html">BOOST_PP_ARRAY_DATA</a></li>
+      <li><a href="../ref/array_elem.html">BOOST_PP_ARRAY_ELEM</a></li>
+      <li><a href="../ref/array_size.html">BOOST_PP_ARRAY_SIZE</a></li>
+    </ul>
+    <hr size="1">
+    <div style="margin-left: 0px;"> <i>© Copyright <a href="http://www.housemarque.com"
+          target="_top">Housemarque Oy</a> 2002</i> <br>
+      <i>© Copyright Paul Mensonides 2002</i> </div>
+    <div style="margin-left: 0px;">
+      <p><small>Distributed under the Boost Software License, Version 1.0. (See
+          accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
+          or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
+    </div>
+  </body>
+</html>
diff --git a/doc/data/lists.html b/doc/data/lists.html
new file mode 100644
index 0000000..27abf08
--- /dev/null
+++ b/doc/data/lists.html
@@ -0,0 +1,42 @@
+<html>
+  <head>
+    <meta content="text/html; charset=windows-1252" http-equiv="content-type">
+    <title>lists.html</title>
+    <link rel="stylesheet" type="text/css" href="../styles.css">
+  </head>
+  <body>
+    <h4>Lists</h4>
+    <div> A <i>list</i> is a simple cons-style list with a head and a
+      tail.&nbsp; The head of a <i>list</i> is an element, and the tail is
+      either another <i>list</i> or <b>BOOST_PP_NIL</b>. For example, </div>
+    <div class="code"> (<i>a</i>, (<i>b</i>, (<i>c</i>, <b>BOOST_PP_NIL</b>)))
+    </div>
+    <div> ...is a <i>list</i> of <i>3</i> elements--<i>a</i>, <i>b</i>, and <i>c</i>.
+    </div>
+    <div> This allows macro parameters to be variable in size and allows data
+      states to change size without the user explicitly keeping track of the
+      size independently.<br>
+      <br>
+      A list can be empty and therefore have a size of 0. An empty list is
+      represented by the notation <b>BOOST_PP_NIL.<br>
+        <br>
+      </b></div>
+    <div> Elements of a <i>list</i> can be extracted with <b>BOOST_PP_LIST_FIRST</b>
+      and <b>BOOST_PP_LIST_REST</b>.&nbsp; </div>
+    <h4>Primitives</h4>
+    <ul>
+      <li><a href="../ref/list_first.html">BOOST_PP_LIST_FIRST</a></li>
+      <li><a href="../ref/list_rest.html">BOOST_PP_LIST_REST</a></li>
+      <li><a href="../ref/nil.html">BOOST_PP_NIL</a></li>
+    </ul>
+    <hr size="1">
+    <div style="margin-left: 0px;"> <i>© Copyright <a href="http://www.housemarque.com"
+          target="_top">Housemarque Oy</a> 2002</i> <br>
+      <i>© Copyright Paul Mensonides 2002</i> </div>
+    <div style="margin-left: 0px;">
+      <p><small>Distributed under the Boost Software License, Version 1.0. (See
+          accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
+          or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
+    </div>
+  </body>
+</html>
diff --git a/doc/data/sequences.html b/doc/data/sequences.html
new file mode 100644
index 0000000..746deb5
--- /dev/null
+++ b/doc/data/sequences.html
@@ -0,0 +1,60 @@
+<html>
+  <head>
+    <meta content="text/html; charset=windows-1252" http-equiv="content-type">
+    <title>sequences.html</title>
+    <link rel="stylesheet" type="text/css" href="../styles.css">
+  </head>
+  <body>
+    <h4> Sequences </h4>
+    <div> A <i>sequence</i> (abbreviated to <i>seq</i>) is a group of adjacent
+      parenthesized elements. For example, </div>
+    <div class="code"> (<i>a</i>)(<i>b</i>)(<i>c</i>) </div>
+    <div> ...is a <i>seq</i> of <i>3</i> elements--<i>a</i>, <i>b</i>, and <i>c</i>.
+    </div>
+    <div> <i>Sequences</i> are data structures that merge the properties of
+      both <i>lists</i> and <i>tuples</i> with the exception that a <i>seq, </i>like
+      a <i>tuple, </i>cannot be empty.&nbsp; Therefore, an "empty" <i>seq</i>
+      is considered a special case scenario that must be handled separately in
+      C++. </div>
+    <div class="code">
+      <pre>#define SEQ (x)(y)(z)
+#define REVERSE(s, state, elem) (elem) state
+   // append to head                  ^
+
+BOOST_PP_SEQ_FOLD_LEFT(REVERSE, BOOST_PP_EMPTY, SEQ)()
+   //                           #1                  #2
+   // 1) placeholder for "empty" seq
+   // 2) remove placeholder
+
+#define SEQ_B (1)(2)(3)
+#define INC(s, state, elem) state (BOOST_PP_INC(elem))
+   // append to tail             ^
+
+BOOST_PP_SEQ_FOLD_RIGHT(INC, BOOST_PP_SEQ_NIL, SEQ)
+   //                        ^
+   // special placeholder that will be "eaten"
+   // by appending to the tail
+</pre> </div>
+    <div> <i>Sequences</i> are extremely efficient.&nbsp; Element access speed
+      approaches random access--even with <i>seqs</i> of up to <i>256</i>
+      elements.&nbsp; This is because element access (among other things) is
+      implemented iteratively rather than recursively.&nbsp; Therefore, elements
+      can be accessed at extremely high indices even on preprocessors with low
+      maximum expansion depths. </div>
+    <div> Elements of a <i>seq</i> can be extracted with <b>BOOST_PP_SEQ_ELEM</b>.
+    </div>
+    <h4> Primitives </h4>
+    <ul>
+      <li> <a href="../ref/seq_elem.html">BOOST_PP_SEQ_ELEM</a></li>
+    </ul>
+    <hr size="1">
+    <div style="margin-left: 0px;"> <i>© Copyright <a href="http://www.housemarque.com"
+          target="_top">Housemarque Oy</a> 2002</i> <br>
+      <i>© Copyright Paul Mensonides 2002</i> </div>
+    <div style="margin-left: 0px;">
+      <p><small>Distributed under the Boost Software License, Version 1.0. (See
+          accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
+          or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
+    </div>
+  </body>
+</html>
diff --git a/doc/data/tuples.html b/doc/data/tuples.html
new file mode 100644
index 0000000..7a93c9b
--- /dev/null
+++ b/doc/data/tuples.html
@@ -0,0 +1,42 @@
+<html>
+  <head>
+    <meta content="text/html; charset=windows-1252" http-equiv="content-type">
+    <title>tuples.html</title>
+    <link rel="stylesheet" type="text/css" href="../styles.css">
+  </head>
+  <body>
+    <h4>Tuples</h4>
+    <div> A <i>tuple</i> is a simple comma-separated list of elements inside
+      parenthesis.&nbsp; For example, </div>
+    <div class="code"> (<i>a</i>, <i>b</i>, <i>c</i>) </div>
+    <div> ...is a <i>tuple</i> of <i>3</i> elements--<i>a</i>, <i>b</i>, and
+      <i>c</i>.<br>
+      <br>
+      A <i>tuple </i>cannot be empty. The notation '()' as a <i>tuple </i>is
+      a single element <i>tuple </i>of size 1, where the element is empty. </div>
+    <div> <i>Tuples</i> are fast and easy to use.&nbsp; With variadic macro
+      support it is not necessary to know the size of a <i>tuple; </i>without
+      variadic macro support&nbsp;all access to <i>tuples</i> requires
+      knowledge of its size. Use a <i>tuple </i>instead of an <i>array</i> if
+      your compiler supports variadic macros, since a <i>tuple </i>has all of
+      the functionality as an <i>array </i>and is easier syntactically to use.
+      The only functionality an <i>array </i>has which a <i>tuple </i>does
+      not have is that an <i>array </i>can be empty whereas a <i>tuple </i>cannot
+      be empty.</div>
+    <div> Elements of a <i>tuple</i> can be extracted with <b>BOOST_PP_TUPLE_ELEM</b>.
+    </div>
+    <h4>Primitives</h4>
+    <ul>
+      <li><a href="../ref/tuple_elem.html">BOOST_PP_TUPLE_ELEM</a></li>
+    </ul>
+    <hr size="1">
+    <div style="margin-left: 0px;"> <i>© Copyright <a href="http://www.housemarque.com"
+          target="_top">Housemarque Oy</a> 2002</i> <br>
+      <i>© Copyright Paul Mensonides 2002</i> </div>
+    <div style="margin-left: 0px;">
+      <p><small>Distributed under the Boost Software License, Version 1.0. (See
+          accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
+          or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
+    </div>
+  </body>
+</html>