| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | // (C) Copyright Jens Maurer 2001.// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//// Revision History:// 15 Nov 2001   Jens Maurer//      created.//  See http://www.boost.org/libs/utility/iterator_adaptors.htm for documentation.#ifndef BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP#define BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP#include <boost/iterator/iterator_facade.hpp>#include <boost/ref.hpp>namespace boost {namespace iterators {template<class Generator>class generator_iterator  : public iterator_facade<        generator_iterator<Generator>      , typename Generator::result_type      , single_pass_traversal_tag      , typename Generator::result_type const&    >{    typedef iterator_facade<        generator_iterator<Generator>      , typename Generator::result_type      , single_pass_traversal_tag      , typename Generator::result_type const&    > super_t; public:    generator_iterator() {}    generator_iterator(Generator* g) : m_g(g), m_value((*m_g)()) {}    void increment()    {        m_value = (*m_g)();    }    const typename Generator::result_type&    dereference() const    {        return m_value;    }    bool equal(generator_iterator const& y) const    {        return this->m_g == y.m_g && this->m_value == y.m_value;    } private:    Generator* m_g;    typename Generator::result_type m_value;};template<class Generator>struct generator_iterator_generator{  typedef generator_iterator<Generator> type;};template <class Generator>inline generator_iterator<Generator>make_generator_iterator(Generator & gen){  typedef generator_iterator<Generator> result_t;  return result_t(&gen);}} // namespace iteratorsusing iterators::generator_iterator;using iterators::generator_iterator_generator;using iterators::make_generator_iterator;} // namespace boost#endif // BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP
 |