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
+
+
+
+
+
+
+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
+
+
+
+Parameter |
+Description |
+
+
+
+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 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.
+
+
+
diff --git a/iterator_adaptor_test.cpp b/iterator_adaptor_test.cpp
index aa7600b..629aac0 100644
--- a/iterator_adaptor_test.cpp
+++ b/iterator_adaptor_test.cpp
@@ -9,6 +9,7 @@
// See http://www.boost.org for most recent version including documentation.
// Revision History
+// 19 Nov 01 Added generator_iterator. (Jens Maurer)
// 04 Nov 01 Updated with respect to change in named parameters.
// (Jeremy Siek)
// 08 Mar 01 Moved indirect and transform tests to separate files.
@@ -51,6 +52,7 @@
#include
#include
+#include
#include
#include
#include
@@ -105,6 +107,14 @@ template struct foo;
void blah(int) { }
+struct my_gen
+{
+ typedef int result_type;
+ my_gen() : n(0) { }
+ int operator()() { return ++n; }
+ int n;
+};
+
int
main()
{
@@ -382,6 +392,18 @@ main()
if (zero) // don't do this, just make sure it compiles
assert((*i).m_x == i->foo());
}
+
+ {
+ // check generator_iterator
+ my_gen g1;
+ boost::generator_iterator_generator::type gen =
+ boost::make_generator_iterator(g1);
+ assert(*gen == 1);
+ ++gen;
+ gen++;
+ assert(*gen == 3);
+ }
+
std::cout << "test successful " << std::endl;
return 0;
}
diff --git a/iterator_adaptors.htm b/iterator_adaptors.htm
index 2b6c7a5..af3211b 100644
--- a/iterator_adaptors.htm
+++ b/iterator_adaptors.htm
@@ -122,6 +122,8 @@
"../../boost/function_output_iterator.hpp">boost/function_output_iterator.hpp
Function Output Iterator Adaptor
+ Header boost/generator_iterator.hpp
+ Generator Iterator Adaptor
Dave
@@ -145,7 +147,9 @@
"filter_iterator.htm">filter_ iterator generators and made some
simplifications to the main iterator_adaptor template.
-
+ Jens Maurer
+ contributed the generator iterator
+ adaptor.