diff --git a/generator_iterator.htm b/generator_iterator.htm new file mode 100644 index 0000000..76b94ed --- /dev/null +++ b/generator_iterator.htm @@ -0,0 +1,150 @@ + + + + +Generator Iterator Adaptor Documentation + + + + +c++boost.gif (8819 bytes) + +

Generator Iterator Adaptor

+Defined in header boost/generator_iterator.hpp +

+The generator iterator adaptor makes it easier to create custom input +iterators from 0-ary functions and function objects. The adaptor +takes a +Generator +and creates a model of +Input Iterator. +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 Random Number library. + +

Synopsis

+ +
+
+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);
+}
+
+
+ +
+ +

The Generator Iterator Generator Class

+ +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. + +
+template <class Generator>
+class generator_iterator_generator
+{
+public:
+  typedef iterator_adaptor<...> type; // the resulting generator iterator type 
+}
+
+ + +

Template Parameters

+ + + + + + + + + +
ParameterDescription
Generator +The generator (0-ary function object) type being +wrapped. The return type of the function must be defined as +Generator::result_type. The function object must be a model +of +Generator. +
+ +

Concept Model

+The generator iterator class is a model of +Input Iterator. + +

Members

+The generator iterator implements the member functions +and operators required of the +Input Iterator +concept. + +
+ +
+

The Generator Iterator Object Generator

+ +The make_generator_iterator() function provides a +convenient way to create generator iterator objects. The function +saves the user the trouble of explicitly writing out the iterator +types. + +
+
+template <class Generator>
+typename generator_iterator_generator<Generator>::type
+make_function_output_iterator(Generator & gen);
+
+
+ +
+ + +

Example

+ +The following program shows how generator_iterator +transforms a generator into an input iterator. + +
+
+#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<my_generator> it(gen);
+  for(int i = 0; i < 10; ++i, ++it)
+    std::cout << *it << std::endl;
+}
+
+
+ +
+ +Written by Jens Maurer. + + +