Imported Upstream version 1.57.0
[platform/upstream/boost.git] / libs / range / doc / html / range / reference / adaptors / reference / type_erased.html
index 87649ee..c40756b 100644 (file)
@@ -3,7 +3,7 @@
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
 <title>type_erased</title>
 <link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Range 2.0">
 <link rel="up" href="../reference.html" title="Reference">
 <link rel="prev" href="strided.html" title="strided">
@@ -26,7 +26,7 @@
 <div class="titlepage"><div><div><h5 class="title">
 <a name="range.reference.adaptors.reference.type_erased"></a><a class="link" href="type_erased.html" title="type_erased">type_erased</a>
 </h5></div></div></div>
-<div class="toc"><dl><dt><span class="section"><a href="type_erased.html#range.reference.adaptors.reference.type_erased.type_erased_example">type-erased
+<div class="toc"><dl class="toc"><dt><span class="section"><a href="type_erased.html#range.reference.adaptors.reference.type_erased.type_erased_example">type-erased
             example</a></span></dt></dl></div>
 <div class="informaltable"><table class="table">
 <colgroup>
             Let <code class="computeroutput"><span class="identifier">Rng</span></code> be the type of
             <code class="computeroutput"><span class="identifier">rng</span></code>.
           </p>
-<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
 <li class="listitem">
-<p class="simpara">
                 <span class="bold"><strong>Template parameters:</strong></span>
-              </p>
-<div class="itemizedlist"><ul class="itemizedlist" type="circle">
+                <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
 <li class="listitem">
-                    <code class="computeroutput"><span class="identifier">Value</span></code> is the
-                    <code class="computeroutput"><span class="identifier">value_type</span></code> for
-                    the <code class="computeroutput"><span class="identifier">any_range</span></code>.
-                    If this is set to boost::use_default, <code class="computeroutput"><span class="identifier">Value</span></code>
-                    will be calculated from the range type when the adaptor is applied.
-                  </li>
+                      <code class="computeroutput"><span class="identifier">Value</span></code> is the
+                      <code class="computeroutput"><span class="identifier">value_type</span></code>
+                      for the <code class="computeroutput"><span class="identifier">any_range</span></code>.
+                      If this is set to boost::use_default, <code class="computeroutput"><span class="identifier">Value</span></code>
+                      will be calculated from the range type when the adaptor is
+                      applied.
+                    </li>
 <li class="listitem">
-                    <code class="computeroutput"><span class="identifier">Traversal</span></code> is
-                    the tag used to identify the traversal of the resultant range.
-                    Frequently it is desireable to set a traversal category lower
-                    than the source container or range to maximize the number of
-                    ranges that can convert to the <code class="computeroutput"><span class="identifier">any_range</span></code>.
-                    If this is left as boost::use_default then <code class="computeroutput"><span class="identifier">Traversal</span></code>
-                    will be <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_traversal</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">Rng</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
-                  </li>
+                      <code class="computeroutput"><span class="identifier">Traversal</span></code> is
+                      the tag used to identify the traversal of the resultant range.
+                      Frequently it is desirable to set a traversal category lower
+                      than the source container or range to maximize the number of
+                      ranges that can convert to the <code class="computeroutput"><span class="identifier">any_range</span></code>.
+                      If this is left as boost::use_default then <code class="computeroutput"><span class="identifier">Traversal</span></code>
+                      will be <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_traversal</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">Rng</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+                    </li>
 <li class="listitem">
-                    <code class="computeroutput"><span class="identifier">Reference</span></code> is
-                    the <code class="computeroutput"><span class="identifier">reference</span></code>
-                    for the <code class="computeroutput"><span class="identifier">any_range</span></code>.
-                    <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span></code> will equate to
-                    <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">range_reference</span><span class="special">&lt;</span><span class="identifier">Rng</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
-                  </li>
+                      <code class="computeroutput"><span class="identifier">Reference</span></code> is
+                      the <code class="computeroutput"><span class="identifier">reference</span></code>
+                      for the <code class="computeroutput"><span class="identifier">any_range</span></code>.
+                      <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span></code> will equate to
+                      <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">range_reference</span><span class="special">&lt;</span><span class="identifier">Rng</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+                    </li>
 <li class="listitem">
-                    <code class="computeroutput"><span class="identifier">Difference</span></code> is
-                    the <code class="computeroutput"><span class="identifier">difference_type</span></code>
-                    for the any_range. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span></code>
-                    will equate to <code class="computeroutput"><span class="keyword">typename</span>
-                    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_difference</span><span class="special">&lt;</span><span class="identifier">Rng</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
-                  </li>
+                      <code class="computeroutput"><span class="identifier">Difference</span></code>
+                      is the <code class="computeroutput"><span class="identifier">difference_type</span></code>
+                      for the any_range. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span></code>
+                      will equate to <code class="computeroutput"><span class="keyword">typename</span>
+                      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_difference</span><span class="special">&lt;</span><span class="identifier">Rng</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+                    </li>
 <li class="listitem">
-                    <code class="computeroutput"><span class="identifier">Buffer</span></code> is the
-                    storage used to allocate the underlying iterator wrappers. This
-                    can typically be ignored, but is available as a template parameter
-                    for customization. Buffer must be a model of the <code class="computeroutput"><span class="identifier">AnyIteratorBufferConcept</span></code>.
-                  </li>
+                      <code class="computeroutput"><span class="identifier">Buffer</span></code> is the
+                      storage used to allocate the underlying iterator wrappers.
+                      This can typically be ignored, but is available as a template
+                      parameter for customization. Buffer must be a model of the
+                      <code class="computeroutput"><span class="identifier">AnyIteratorBufferConcept</span></code>.
+                    </li>
 </ul></div>
-</li>
+              </li>
 <li class="listitem">
                 <span class="bold"><strong>Precondition:</strong></span> <code class="computeroutput"><span class="identifier">Traversal</span></code>
                 is one of <code class="computeroutput"><span class="special">{</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">single_pass_traversal_tag</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bidirectional_traversal_tag</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random_access_traversal_tag</span>
                 otherwise <code class="computeroutput"><span class="identifier">Traversal</span></code>.
               </li>
 </ul></div>
-<a name="range.reference.adaptors.reference.type_erased.anyiteratorbufferconcept"></a><h6>
-<a name="id677095"></a>
-            <a class="link" href="type_erased.html#range.reference.adaptors.reference.type_erased.anyiteratorbufferconcept">AnyIteratorBufferConcept</a>
+<h6>
+<a name="range.reference.adaptors.reference.type_erased.h0"></a>
+            <span class="phrase"><a name="range.reference.adaptors.reference.type_erased.anyiteratorbufferconcept"></a></span><a class="link" href="type_erased.html#range.reference.adaptors.reference.type_erased.anyiteratorbufferconcept">AnyIteratorBufferConcept</a>
           </h6>
 <p>
-            
 </p>
 <pre class="programlisting"><span class="keyword">class</span> <span class="identifier">AnyIteratorBufferConcept</span>
 <span class="special">{</span>
     <span class="identifier">AnyIteratorBufferConcept</span><span class="special">();</span>
     <span class="special">~</span><span class="identifier">AnyIteratorBufferConcept</span><span class="special">();</span>
 
-    <span class="comment">// bytes is the requested size to allocate. This function
-</span>    <span class="comment">// must return a pointer to an adequate area of memory.
-</span>    <span class="comment">// throws: bad_alloc
-</span>    <span class="comment">//
-</span>    <span class="comment">// The buffer will only ever have zero or one
-</span>    <span class="comment">// outstanding memory allocations.
-</span>    <span class="keyword">void</span><span class="special">*</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">bytes</span><span class="special">);</span>
+    <span class="comment">// bytes is the requested size to allocate. This function</span>
+    <span class="comment">// must return a pointer to an adequate area of memory.</span>
+    <span class="comment">// throws: bad_alloc</span>
+    <span class="comment">//</span>
+    <span class="comment">// The buffer will only ever have zero or one</span>
+    <span class="comment">// outstanding memory allocations.</span>
+    <span class="keyword">void</span><span class="special">*</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">bytes</span><span class="special">);</span>
 
-    <span class="comment">// deallocate this buffer
-</span>    <span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">();</span>
+    <span class="comment">// deallocate this buffer</span>
+    <span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">();</span>
 <span class="special">};</span>
 </pre>
 <p>
             example</a>
 </h6></div></div></div>
 <p>
-              
 </p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">range</span><span class="special">/</span><span class="identifier">adaptor</span><span class="special">/</span><span class="identifier">type_erased</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">range</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">copy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foreach</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">algorithm</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iterator</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">list</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
 
-<span class="comment">// The client interface from an OO perspective merely requires a sequence
-</span><span class="comment">// of integers that can be forward traversed
-</span><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_range</span><span class="special">&lt;</span>
+<span class="comment">// The client interface from an OO perspective merely requires a sequence</span>
+<span class="comment">// of integers that can be forward traversed</span>
+<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_range</span><span class="special">&lt;</span>
     <span class="keyword">int</span>
   <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
   <span class="special">,</span> <span class="keyword">int</span>
         <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">;</span>
         <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">;</span>
 
-        <span class="comment">// Under most conditions one would simply use an appropriate
-</span>        <span class="comment">// any_range as a function parameter. The type_erased adaptor
-</span>        <span class="comment">// is often superfluous. However because the type_erased
-</span>        <span class="comment">// adaptor is applied to a range, we can use default template
-</span>        <span class="comment">// arguments that are generated in conjunction with the
-</span>        <span class="comment">// range type to which we are applying the adaptor.
-</span>
+        <span class="comment">// Under most conditions one would simply use an appropriate</span>
+        <span class="comment">// any_range as a function parameter. The type_erased adaptor</span>
+        <span class="comment">// is often superfluous. However because the type_erased</span>
+        <span class="comment">// adaptor is applied to a range, we can use default template</span>
+        <span class="comment">// arguments that are generated in conjunction with the</span>
+        <span class="comment">// range type to which we are applying the adaptor.</span>
+
         <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">input</span><span class="special">;</span>
         <span class="identifier">input</span> <span class="special">+=</span> <span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">,</span><span class="number">5</span><span class="special">;</span>
 
-        <span class="comment">// Note that this call is to a non-template function
-</span>        <span class="identifier">server</span><span class="special">::</span><span class="identifier">display_integers</span><span class="special">(</span><span class="identifier">input</span><span class="special">);</span>
+        <span class="comment">// Note that this call is to a non-template function</span>
+        <span class="identifier">server</span><span class="special">::</span><span class="identifier">display_integers</span><span class="special">(</span><span class="identifier">input</span><span class="special">);</span>
 
         <span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">input2</span><span class="special">;</span>
         <span class="identifier">input2</span> <span class="special">+=</span> <span class="number">6</span><span class="special">,</span><span class="number">7</span><span class="special">,</span><span class="number">8</span><span class="special">,</span><span class="number">9</span><span class="special">,</span><span class="number">10</span><span class="special">;</span>
 
-        <span class="comment">// Note that this call is to the same non-tempate function
-</span>        <span class="identifier">server</span><span class="special">::</span><span class="identifier">display_integers</span><span class="special">(</span><span class="identifier">input2</span><span class="special">);</span>
+        <span class="comment">// Note that this call is to the same non-tempate function</span>
+        <span class="identifier">server</span><span class="special">::</span><span class="identifier">display_integers</span><span class="special">(</span><span class="identifier">input2</span><span class="special">);</span>
 
         <span class="identifier">input2</span><span class="special">.</span><span class="identifier">clear</span><span class="special">();</span>
         <span class="identifier">input2</span> <span class="special">+=</span> <span class="number">11</span><span class="special">,</span><span class="number">12</span><span class="special">,</span><span class="number">13</span><span class="special">,</span><span class="number">14</span><span class="special">,</span><span class="number">15</span><span class="special">;</span>
 
-        <span class="comment">// Calling using the adaptor looks like this:
-</span>        <span class="comment">// Notice that here I have a type_erased that would be a
-</span>        <span class="comment">// bidirectional_traversal_tag, but this is convertible
-</span>        <span class="comment">// to the forward_traversal_tag equivalent hence this
-</span>        <span class="comment">// works.
-</span>        <span class="identifier">server</span><span class="special">::</span><span class="identifier">display_integers</span><span class="special">(</span><span class="identifier">input2</span> <span class="special">|</span> <span class="identifier">type_erased</span><span class="special">&lt;&gt;());</span>
+        <span class="comment">// Calling using the adaptor looks like this:</span>
+        <span class="comment">// Notice that here I have a type_erased that would be a</span>
+        <span class="comment">// bidirectional_traversal_tag, but this is convertible</span>
+        <span class="comment">// to the forward_traversal_tag equivalent hence this</span>
+        <span class="comment">// works.</span>
+        <span class="identifier">server</span><span class="special">::</span><span class="identifier">display_integers</span><span class="special">(</span><span class="identifier">input2</span> <span class="special">|</span> <span class="identifier">type_erased</span><span class="special">&lt;&gt;());</span>
 
-        <span class="comment">// However we may simply wish to define an adaptor that
-</span>        <span class="comment">// takes a range and makes it into an appropriate
-</span>        <span class="comment">// forward_traversal any_range...
-</span>        <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">type_erased</span><span class="special">&lt;</span>
+        <span class="comment">// However we may simply wish to define an adaptor that</span>
+        <span class="comment">// takes a range and makes it into an appropriate</span>
+        <span class="comment">// forward_traversal any_range...</span>
+        <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">type_erased</span><span class="special">&lt;</span>
             <span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
           <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
         <span class="special">&gt;</span> <span class="identifier">type_erased_forward</span><span class="special">;</span>
 
-        <span class="comment">// This adaptor can turn other containers with different
-</span>        <span class="comment">// value_types and reference_types into the appropriate
-</span>        <span class="comment">// any_range.
-</span>
+        <span class="comment">// This adaptor can turn other containers with different</span>
+        <span class="comment">// value_types and reference_types into the appropriate</span>
+        <span class="comment">// any_range.</span>
+
         <span class="identifier">server</span><span class="special">::</span><span class="identifier">display_integers</span><span class="special">(</span><span class="identifier">input2</span> <span class="special">|</span> <span class="identifier">type_erased_forward</span><span class="special">());</span>
     <span class="special">}</span>
 <span class="special">}</span>
             </p>
 </div>
 <p>
-            This would produce the output: 
+            This would produce the output:
 </p>
-<pre class="programlisting"><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">,</span><span class="number">5</span>
-<span class="number">6</span><span class="special">,</span><span class="number">7</span><span class="special">,</span><span class="number">8</span><span class="special">,</span><span class="number">9</span><span class="special">,</span><span class="number">10</span>
-<span class="number">11</span><span class="special">,</span><span class="number">12</span><span class="special">,</span><span class="number">13</span><span class="special">,</span><span class="number">14</span><span class="special">,</span><span class="number">15</span>
-<span class="number">11</span><span class="special">,</span><span class="number">12</span><span class="special">,</span><span class="number">13</span><span class="special">,</span><span class="number">14</span><span class="special">,</span><span class="number">15</span>
+<pre class="programlisting"><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">,</span><span class="number">5</span><span class="special">,</span>
+<span class="number">6</span><span class="special">,</span><span class="number">7</span><span class="special">,</span><span class="number">8</span><span class="special">,</span><span class="number">9</span><span class="special">,</span><span class="number">10</span><span class="special">,</span>
+<span class="number">11</span><span class="special">,</span><span class="number">12</span><span class="special">,</span><span class="number">13</span><span class="special">,</span><span class="number">14</span><span class="special">,</span><span class="number">15</span><span class="special">,</span>
+<span class="number">11</span><span class="special">,</span><span class="number">12</span><span class="special">,</span><span class="number">13</span><span class="special">,</span><span class="number">14</span><span class="special">,</span><span class="number">15</span><span class="special">,</span>
 </pre>
 <p>
           </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2003 -2010 Thorsten Ottosen, Neil Groves<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2003-2010 Thorsten Ottosen,
+      Neil Groves<p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
         file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
       </p>