// (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 #include namespace boost { namespace iterators { template class generator_iterator : public iterator_facade< generator_iterator , typename Generator::result_type , single_pass_traversal_tag , typename Generator::result_type const& > { typedef iterator_facade< generator_iterator , 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 struct generator_iterator_generator { typedef generator_iterator type; }; template inline generator_iterator make_generator_iterator(Generator & gen) { typedef generator_iterator result_t; return result_t(&gen); } } // namespace iterators using iterators::generator_iterator; using iterators::generator_iterator_generator; using iterators::make_generator_iterator; } // namespace boost #endif // BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP