| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| |
| <html> |
| <head> |
| <meta http-equiv="Content-Language" content="en-us"> |
| <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> |
| |
| <title>Generator Iterator Adaptor Documentation</title> |
| </head> |
| |
| <body bgcolor="#FFFFFF" text="#000000"> |
| <img src="../../boost.png" alt="boost.png (6897 bytes)" align="middle" |
| width="277" height="86"> |
| |
| <h1>Generator Iterator Adaptor</h1> |
| |
| <p>Defined in header <a href= |
| "../../boost/generator_iterator.hpp">boost/generator_iterator.hpp</a></p> |
| |
| <p>The generator iterator adaptor makes it easier to create custom input |
| iterators from 0-ary functions and function objects. The adaptor takes a |
| <a href="http://www.sgi.com/tech/stl/Generator.html">Generator</a> and |
| creates a model of <a href= |
| "http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a>. Each |
| increment retrieves an item from the generator and makes it available to be |
| retrieved by dereferencing. The motivation for this iterator is that some |
| concepts can be more naturally expressed as a generator, while most STL |
| algorithms expect an iterator. An example is the <a href= |
| "../random/index.html">Random Number</a> library.</p> |
| |
| <h2>Synopsis</h2> |
| |
| <blockquote> |
| <pre> |
| namespace boost { |
| template <class Generator> |
| class generator_iterator_policies; |
| |
| template <class Generator> |
| class generator_iterator_generator; |
| |
| template <class Generator> |
| typename generator_iterator_generator<Generator>::type |
| make_generator_iterator(Generator & gen); |
| } |
| </pre> |
| </blockquote> |
| <hr> |
| |
| <h2>The Generator Iterator Generator Class</h2> |
| |
| <p>The class generator_iterator_generator is a helper class whose purpose |
| is to construct a generator iterator type. The template parameter for this |
| class is the Generator function object type that is being wrapped. The |
| generator iterator adaptor only holds a reference (or pointer) to the |
| function object, therefore the function object must outlive the generator |
| iterator adaptor constructed from it.</p> |
| <pre> |
| template <class Generator> |
| class generator_iterator_generator |
| { |
| public: |
| typedef <i>unspecified</i> type; // the resulting generator iterator type |
| } |
| </pre> |
| |
| <h3>Template Parameters</h3> |
| |
| <table border summary=""> |
| <tr> |
| <th>Parameter</th> |
| |
| <th>Description</th> |
| </tr> |
| |
| <tr> |
| <td><tt><a href= |
| "http://www.sgi.com/tech/stl/Generator.html">Generator</a></tt></td> |
| |
| <td>The generator (0-ary function object) type being wrapped. The |
| return type of the function must be defined as |
| <tt>Generator::result_type</tt>. The function object must be a model of |
| <a href= |
| "http://www.sgi.com/tech/stl/Generator.html">Generator</a>.</td> |
| </tr> |
| </table> |
| |
| <h3>Concept Model</h3> |
| |
| <p>The generator iterator class is a model of <a href= |
| "http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a>.</p> |
| |
| <h3>Members</h3> |
| |
| <p>The generator iterator implements the member functions and operators |
| required of the <a href= |
| "http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a> |
| concept.<br></p> |
| <hr> |
| |
| <h2><a name="make_generator_iterator" id="make_generator_iterator">The |
| Generator Iterator Object Generator</a></h2> |
| |
| <p>The <tt>make_generator_iterator()</tt> function provides a convenient |
| way to create generator iterator objects. The function saves the user the |
| trouble of explicitly writing out the iterator types.</p> |
| |
| <blockquote> |
| <pre> |
| template <class Generator> |
| typename generator_iterator_generator<Generator>::type |
| make_generator_iterator(Generator & gen); |
| </pre> |
| </blockquote> |
| <hr> |
| |
| <h3>Example</h3> |
| |
| <p>The following program shows how <code>generator_iterator</code> |
| transforms a generator into an input iterator.</p> |
| |
| <blockquote> |
| <pre> |
| #include <iostream> |
| #include <boost/generator_iterator.hpp> |
| |
| class my_generator |
| { |
| public: |
| typedef int result_type; |
| my_generator() : state(0) { } |
| int operator()() { return ++state; } |
| private: |
| int state; |
| }; |
| |
| int main() |
| { |
| my_generator gen; |
| boost::generator_iterator_generator<my_generator>::type it = boost::make_generator_iterator(gen); |
| for(int i = 0; i < 10; ++i, ++it) |
| std::cout << *it << std::endl; |
| } |
| </pre> |
| </blockquote> |
| <hr> |
| |
| <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= |
| "../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional" |
| height="31" width="88"></a></p> |
| |
| <p>Revised |
| <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->05 December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38516" --></p> |
| |
| <p><i>Copyright © 2001 <a href= |
| "http://www.boost.org/people/jens_maurer.htm">Jens Maurer</a></i></p> |
| |
| <p><i>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">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> |
| </body> |
| </html> |